我们有Elasticsearch 7.0.1和Spring Boot 1.5,并使用了 RestHighLevelClient
来设置SSL证书和基本认证为这样的。
@Bean(destroyMethod = "close")
public RestHighLevelClient initRestHighLevelClient() {
RestClientBuilder builder = null;
if (this.scheme.equalsIgnoreCase("http")) {
builder = RestClient.builder(new HttpHost(hostName, port, scheme));
} else {
try {
KeyStore truststore = KeyStore.getInstance("jks");
//TODO if it won't always be on classpath we should use Files.newInputStream(Paths.get(...))
try (InputStream is = new ClassPathResource("dev.jks").getInputStream()) {
truststore.load(is, storePass.toCharArray());
}
SSLContextBuilder sslBuilder = SSLContexts.custom()
.loadTrustMaterial(truststore, null);
final SSLContext sslContext = sslBuilder.build();
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(user, pass));
builder = RestClient.builder(
new HttpHost(hostName, port, scheme))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider)
.setSSLContext(sslContext);
}
});
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | KeyManagementException e) {
System.out.println("Unable to initialize elasticsearch connection, shutting down");
}
}
final RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
然后我们使用 SearchSourceBuilder
来创建我们的查询并执行为。
restHighLevelClient.search(new SearchRequest(indexName).source(searchSourceBuilder), RequestOptions.DEFAULT);
问题是,授权头,
Authorization Basic TOKEN);
并不是每个请求都会被传递,我们必须这样做。
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
builder.addHeader("Authorization", "Basic " + "BASE64_ENCODED_TOKEN");
return restHighLevelClient.search(new SearchRequest(indexName).source(searchSourceBuilder),builder.build());
这样就能成功了
我们缺少了什么?配置不是应该已经为我们做了这些吗?
参考文献。https:/www.elastic.coguideenelastic-stack-overviewcurrenthttp-clients.htmlhttps:/www.elastic.coguideenelasticsearchclientjava-restmasterjava-rest-low-usage-requests.html#java-rest-low-usage-request-optionshttps:/www.elastic.coguideenelasticsearchclientjava-restcurrent_basic_authentication.html
谢谢你,谢谢你