Добавьте аутентификацию в высокоуровневом клиенте 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;
                        }
                ));
Другие вопросы по тегам