Вы можете получить доступ к кластеру CSS с помощью Spring Boot. Spring Boot может подключаться к кластеру любым из следующих способов:
Для получения подробной информации о том, как использовать Spring Boot, см. официальную документацию: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
7.10.2 указывает версию клиента Elasticsearch Java.
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.10.2</version></dependency></dependencies>
Этот сценарий применим к кластерам в режиме без безопасности или кластерам в режиме безопасности+HTTP.
Файл конфигурации:
elasticsearch.url=host1:9200,host2:9200// Вам не нужно настраивать следующие две строки для кластера без безопасности.elasticsearch.имя пользователя=имя пользователяelasticsearch.пароль=пароль
Параметр | Описание |
|---|---|
Хост | IP адрес для доступа к кластеру Elasticsearch. |
имя пользователя | Имя пользователя для доступа к кластеру. |
пароль | Пароль пользователя. |
Код:
пакет com.xxx.configuration;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.data.elasticsearch.client.ClientConfiguration;import org.springframework.data.elasticsearch.client.RestClients;import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;@Configuration@EnableElasticsearchRepositories(basePackages = "com.xxx.repository")@ComponentScan(basePackages = "com.xxx")public class Config extends AbstractElasticsearchConfiguration {@Value("${elasticsearch.url}")public String elasticsearchUrl;// Для кластера без безопасности вам не нужно задавать следующие два параметра.@Value("${elasticsearch.username}")public String elasticsearchUsername;@Value("${elasticsearch.password}")public String elasticsearchPassword;@Override@Beanpublic RestHighLevelClient elasticsearchClient() {final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(StringHostParse(elasticsearchUrl))// Для кластера без обеспечения безопасности нет необходимости настраивать withBasicAuth..withBasicAuth(elasticsearchUsername, elasticsearchPassword).build();return RestClients.create(clientConfiguration).rest();}private String[] StringHostParse(String hostAndPorts) {return hostAndPorts.split(",");}}
Вы можете подключиться к кластеру в режиме безопасности + HTTPS без использования какого‑либо сертификата безопасности.
Файл конфигурации:
elasticsearch.url=host1:9200,host2:9200elasticsearch.имя пользователя=имя пользователяelasticsearch.пароль=пароль
Параметр | Описание |
|---|---|
хост | IP-адрес для доступа к кластеру Elasticsearch. |
имя пользователя | Имя пользователя для доступа к кластеру. |
пароль | Пароль пользователя. |
Код:
package com.xxx.configuration;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.data.elasticsearch.client.ClientConfiguration;import org.springframework.data.elasticsearch.client.RestClients;import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;@Configuration@EnableElasticsearchRepositories(basePackages = "com.xxx.repository")@ComponentScan(basePackages = "com.xxx")public class Config extends AbstractElasticsearchConfiguration {@Value("${elasticsearch.url}")public String elasticsearchUrl;@Value("${elasticsearch.username}")public String elasticsearchUsername;@Value("${elasticsearch.password}")public String elasticsearchPassword;@Override@Beanpublic RestHighLevelClient elasticsearchClient() {SSLContext sc = null;try {sc = SSLContext.getInstance("SSL");sc.init(null, trustAllCerts, new SecureRandom());} catch (KeyManagementException | NoSuchAlgorithmException e) {e.printStackTrace();}final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(StringHostParse(elasticsearchUrl)).usingSsl(sc, new NullHostNameVerifier()).withBasicAuth(elasticsearchUsername, elasticsearchPassword).build();return RestClients.create(clientConfiguration).rest();}private String[] StringHostParse(String hostAndPorts) {return hostAndPorts.split(",");}public static TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}}};public static class NullHostNameVerifier implements HostnameVerifier {@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}}}
Вы можете использовать сертификат безопасности для подключения к кластеру в режиме безопасности + HTTPS.
elasticsearch.url=host1:9200,host2:9200elasticsearch.имя пользователя=имя пользователяelasticsearch.пароль=пароль
Параметр | Описание |
|---|---|
Хост | IP-адрес для доступа к кластеру Elasticsearch. |
имя пользователя | Имя пользователя для доступа к кластеру. |
пароль | Пароль пользователя. |
пакет com.xxx.configuration;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.data.elasticsearch.client.ClientConfiguration;import org.springframework.data.elasticsearch.client.RestClients;import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.security.KeyStore;import java.security.SecureRandom;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.TrustManagerFactory;import javax.net.ssl.X509TrustManager;@Configuration@EnableElasticsearchRepositories(basePackages = "com.xxx.repository")@ComponentScan(basePackages = "com.xxx")public class Config extends AbstractElasticsearchConfiguration {@Value("${elasticsearch.url}")public String elasticsearchUrl;@Value("${elasticsearch.username}")public String elasticsearchUsername;@Value("${elasticsearch.password}")public String elasticsearchPassword;@Override@Beanpublic RestHighLevelClient elasticsearchClient() {SSLContext sc = null;try {TrustManager[] tm = {new MyX509TrustManager(certFilePath, certPassword)};sc = SSLContext.getInstance("SSL", "SunJSSE");sc.init(null, tm, new SecureRandom());} catch (Exception e) {e.printStackTrace();}final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo(StringHostParse(elasticsearchUrl)).usingSsl(sc, new NullHostNameVerifier()).withBasicAuth(elasticsearchUsername, elasticsearchPassword).build();return RestClients.create(clientConfiguration).rest();}private String[] StringHostParse(String hostAndPorts) {return hostAndPorts.split(",");}public static class MyX509TrustManager implements X509TrustManager {X509TrustManager sunJSSEX509TrustManager;MyX509TrustManager(String certFilePath, String certPassword) throws Exception {File file = new File(certFilePath);if (!file.isFile()) {throw new Exception("Неправильный путь сертификата");}System.out.println("Загрузка KeyStore " + file + "...");InputStream in = new FileInputStream(file);KeyStore ks = KeyStore.getInstance("JKS");ks.load(in, certPassword.toCharArray());TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE");tmf.init(ks);TrustManager[] tms = tmf.getTrustManagers();for (TrustManager tm : tms) {if (tm instanceof X509TrustManager) {sunJSSEX509TrustManager = (X509TrustManager) tm;return;}}throw new Exception("Couldn't initialize");}@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}public static class NullHostNameVerifier implements HostnameVerifier {@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}}}
В предыдущей команде, certFilePath и certPassword указывают путь и пароль к сертификату .jks соответственно.
Для доступа к кластеру Elasticsearch в режиме безопасности, использующему HTTPS, необходимо загрузить сертификат безопасности. Выполните следующие шаги, чтобы получить сертификат безопасности и загрузить его в клиент:
keytool -import -alias newname -keystore ./truststore.jks -file ./CloudSearchService.cer
keytool -import -alias newname -keystore .\truststore.jks -file .\CloudSearchService.cer
В предыдущей команде, newname указывает имя сертификата, определённого пользователем.
После выполнения этой команды вам будет предложено задать пароль сертификата и подтвердить его. Надёжно сохраните пароль. Он будет использоваться для доступа к кластеру.