Добавьте аутентификацию в высокоуровневом клиенте asticsearch для JAVA
Я использую экземпляр эластичного поиска в экземпляре эластичного облака, защищенного с помощью X-PACK.
Раньше я без проблем использовал высокоуровневый клиент, но не могу найти, как отправить на него заголовок базовой аутентификации.
Я попытался поместить учетные данные как часть URL-адреса, но в этом случае он не смог подключиться.
Кому-нибудь удалось подключиться к защищенному сайту с высоким уровнем отдыха?
Ура,
2 ответа
Вы можете указать имя пользователя и пароль для клиента REST Java низкого уровня и передать клиент 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);
Рекомендации:
Выполните простые шаги, чтобы подготовить RestHighLevelClient для подключения TLS+Auth Elastic Search.
Создайте CredentialsProvider, используя BasicCredentialsProvider, предоставленный Apache httpclient, как показано ниже.
final CredentialsProvider credentialProvider = new BasicCredentialsProvider();
credentialProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials(
ES_USERNAME,
ES_PASSWORD
));
Создайте HttpHost, предоставленный apache, используя хост, порт и протокол, как показано ниже.
HttpHost httpHost = new HttpHost("ELASTIC_SEARCH_HOST", 9200, "https");
Здесь я использовал «https», так как TLS включен на ES. Вы можете использовать "http" для обычного ES.
И последний шаг — создать RestHighLevelCLient, как показано ниже.
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(nodes)
.setHttpClientConfigCallback(httpAsyncClientBuilder -> {
httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialProvider);
return httpAsyncClientBuilder;
}
));