Phil
Phil

Reputation: 7566

Consuming ElasticSearch endpoint behind Basic-Auth-Proxy with RestHighLevelClient

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

Answers (1)

Noman Khan
Noman Khan

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

Related Questions