我正在使用安全的X-PACK保护的弹性云实例中的elasticsearch实例。
我之前一直使用高级rest客户端没有任何问题,但是我不知道如何在其中发送基本认证头信息。
我尝试将凭据作为URL的一部分放入其中,但在这种情况下似乎无法连接。
是否有人成功使用高级rest客户端连接到安全的elasticsearch?
我正在使用安全的X-PACK保护的弹性云实例中的elasticsearch实例。
我之前一直使用高级rest客户端没有任何问题,但是我不知道如何在其中发送基本认证头信息。
我尝试将凭据作为URL的一部分放入其中,但在这种情况下似乎无法连接。
是否有人成功使用高级rest客户端连接到安全的elasticsearch?
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);
参考文献:
按照以下简单步骤使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;
}
));