Reputation: 7566
I have an ElasticSearch cluster that is behind a proxy configured with Basic Auth. How do I make a call from RestHighLevelClient with credentials? In SpringBoot you usually have to configure a HttpClientContext like this:
@Bean
public HttpClientContext configuredContext() {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(DEFAULT_USER, DEFAULT_PASS));
AuthCache authCache = new BasicAuthCache();
authCache.put(httpHost, new BasicScheme());
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);
return context;
}
but I can't find any fitting parameters on the ClientBuilder or Request for the context. Is there any way to make this setup work?
Upvotes: 1
Views: 1280
Reputation: 960
You can create RestHighLevelClient instance as
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "password"));
RestClientBuilder builder = RestClient.builder(new HttpHost("server", port))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
RestHighLevelClient client = new RestHighLevelClient(builder);
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_basic_authentication.html. Hope this helps.
Upvotes: 2