为Java的Elasticsearch高级客户端添加认证功能

23

我正在使用安全的X-PACK保护的弹性云实例中的elasticsearch实例。

我之前一直使用高级rest客户端没有任何问题,但是我不知道如何在其中发送基本认证头信息。

我尝试将凭据作为URL的一部分放入其中,但在这种情况下似乎无法连接。

是否有人成功使用高级rest客户端连接到安全的elasticsearch?

2个回答

51
您可以指定Java Low Level REST Client的用户名和密码,并将该低级REST客户端传递给RestHighLevelClient实例。
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
        new UsernamePasswordCredentials("user", "password"));

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200))
        .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        });

RestHighLevelClient client = new RestHighLevelClient(builder);

参考文献:


你能告诉我如果我使用Search Guard而不是X-Pack,如何做同样的事情吗? - Kasinaat 007

0

按照以下简单步骤使RestHighLevelClient准备好连接TLS+Auth Elastic Search

使用Apache httpclient提供的BasicCredentialsProvider创建一个CredentialsProvider,如下所示

final CredentialsProvider credentialProvider = new BasicCredentialsProvider();
    credentialProvider.setCredentials(
            AuthScope.ANY,
            new UsernamePasswordCredentials(
                    ES_USERNAME,
                    ES_PASSWORD
            ));

使用主机名、端口和协议创建一个由Apache提供的HttpHost,示例如下:

HttpHost httpHost = new HttpHost("ELASTIC_SEARCH_HOST", 9200, "https");

这里我使用了 "https",因为 ES 上启用了 TLS。您可以在普通的 ES 上使用 "http"。

最后一步是创建如下所示的 RestHighLevelCLient

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(nodes)
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> {
                            httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialProvider);
                            return httpAsyncClientBuilder;
                        }
                ));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接