首页 > 解决方案 > 如何通过 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命中安全弹性搜索时需要做哪些进一步的更改吗?

标签: javaspring-bootsecurityelasticsearchelasticsearch-high-level-restclient

解决方案


在 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;
  }

推荐阅读