java查询ES数据时,报错missing authentication credentials for REST request

 通过java代码查询ES里数据时,报错缺少身份认证凭证,但在注册RestClient的时候已经提供了用户名、密码,并且测试环境没有出现这个问题,生产环境报错。

如下,在查询数据时new了ElasticsearchClient,使用该客户端进行查询,注册client时提供了用户密码

ElasticsearchTransport transport = new RestClientTransport(
                client, new JacksonJsonpMapper());
        ElasticsearchClient eSclient = new ElasticsearchClient(transport);

注册client的代码 

RestClientBuilder builder = RestClient.builder(httpHosts);
        if(StringUtils.isNotBlank(elasticsearchClusterName)&&StringUtils.isNotBlank(elasticsearchPassword)){
            log.debug("ES用户名密码不为空,设置用户名、密码:username="+elasticsearchUsername+",passwd="+elasticsearchPassword);
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(AuthScope.ANY,
                    new UsernamePasswordCredentials(elasticsearchUsername, elasticsearchPassword));
            builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                @Override
                public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                }
            });
        }

网上查询没有答案,检查用户名密码正确,于是有点怀疑注册时没有进if(这个时候还是没发现条件写错了),最后在if里加了这句日志,启动应用发现果然没有进if。

仔细看了判断条件,然后发现是判断条件写错导致没进if。条件里本该写elasticsearchUsername的地方由于粗心写成了elasticsearchClusterName(这两个变量长得差不多,根据自动提示选错了),刚好生产环境的elasticsearchClusterName为空,导致没有添加相关凭证。而测试环境的clustername设了值,所以没有报错。修改条件后,报错解决。

记一次粗心导致报错的经历,以后一定要细心,浪费了不少时间。 ̄□ ̄||

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值