java - 如何通过 Java High Level Rest Client 实现 Secure Elastic Search
问题描述
我是弹性搜索的新手。通过Java High Level Rest Client
.
我已经如下配置了 JHLRC bean,它工作正常:
@Bean(destroyMethod = "close")
public RestHighLevelClient client() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
return client;
}
开始探索 Elasticsearch 的安全性,在设置证书和密码后,我通过提供以下属性启用了安全性:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
我可以使用创建的用户名和密码登录 kibana,但在通过 JHLRC 访问任何 Elastic 搜索 API 时获得 401 Unauthorized。
有人可以帮助我在配置Java High Level Rest Client
命中安全弹性搜索时需要做哪些进一步的更改吗?
解决方案
在 JHLRC 中进行以下更改后,它起作用了:
@Bean(destroyMethod = "close")
public RestHighLevelClient client() {
final BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
basicCredentialsProvider
.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "password_generated_by_elastic_search"));
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
httpClientBuilder.disableAuthCaching();
return httpClientBuilder.setDefaultCredentialsProvider(basicCredentialsProvider);
}
})
);
return restHighLevelClient;
}
推荐阅读
- command-prompt - 在我的命令提示符下,总是出现“命令未被识别为内部或外部命令、可运行程序或批处理文件”
- .net - ASP.NET Core (.NET 5) + Angular 11 = 在空项目上构建错误
- nginx - 如何将 GitLab 放在 nginx 后面
- javascript - Firebase 提取对象的名称
- core-data - 我如何(或应该?)用嵌套的 managedObjectContext 替换这个 CoreData SwiftUI 应用程序中的 MVVM?
- javascript - 如何防止父对象激活子对象的事件
- javascript - 如何将第二个文本框中的日期设置为第一个文本框的日期 + 1
- python - 如果集合中的前一个文档包含某个值,我如何不创建新文档?
- javascript - 从javascript中的localStorage中删除嵌套项目
- r - R用mtcars编程饼图