通过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设了值,所以没有报错。修改条件后,报错解决。文章来源:https://www.toymoban.com/news/detail-854469.html
记一次粗心导致报错的经历,以后一定要细心,浪费了不少时间。 ̄□ ̄||文章来源地址https://www.toymoban.com/news/detail-854469.html
到了这里,关于java查询ES数据时,报错missing authentication credentials for REST request的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!