From d7c4fc1df32ef9ae77839c3acabdf49a385ec865 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Fri, 1 Nov 2024 16:33:23 +0800 Subject: [PATCH] =?UTF-8?q?es=E8=B4=A6=E5=8F=B7=E5=AF=86=E7=A0=81=E5=8A=A0?= =?UTF-8?q?=E8=A7=A3=E5=AF=86=E5=92=8C=E6=98=AF=E5=90=A6=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=AF=86=E7=A0=81=E8=A7=A3=E8=80=A6=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=8D=E9=9C=80=E8=A6=81=E5=8A=A0=E8=A7=A3?= =?UTF-8?q?=E5=AF=86=E4=B9=9F=E5=8F=AF=E4=BB=A5=E7=94=A8=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E8=BF=9E=E6=8E=A5=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AF=81=E4=B9=A6=E4=BB=8E=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...henfengElasticsearchAutoConfiguration.java | 87 +++++++++++-------- .../framework/es/config/EsProperties.java | 10 +++ .../src/main/resources/application-dev.yaml | 4 + .../src/main/resources/application-dev.yaml | 4 + 4 files changed, 70 insertions(+), 35 deletions(-) diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java index 6c4b9752f..4adfe55e4 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java @@ -1,5 +1,8 @@ package com.cf.imes.framework.es.config; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.json.jackson.JacksonJsonpMapper; @@ -26,12 +29,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.core.io.ClassPathResource; import org.springframework.util.StringUtils; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Path; +import java.nio.file.Paths; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; @@ -95,25 +99,7 @@ public class ChenfengElasticsearchAutoConfiguration { @Bean @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public RestClient getAuthRestClient(EsProperties properties) { - // 配置账号密码 - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(AesUtils.decrypt(properties.getUsername(), publicKey), AesUtils.decrypt(properties.getPassword(), publicKey))); - RestClientBuilder.HttpClientConfigCallback httpClientConfigCallback = httpClientBuilder -> { - // 设置账号密码、连接信息 - HttpAsyncClientBuilder httpAsyncClientBuilder = httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) - .setDefaultRequestConfig(RequestConfig.custom() - .setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()) - .setSocketTimeout(properties.getSocketTimeout().toSecondsPart()) - .setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()) - .build()); - if (properties.isSecurityHttpSslEnable()) { - // 开启ssl配置连接证书 - httpAsyncClientBuilder.setSSLContext(buildSSLContext()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); - } - return httpAsyncClientBuilder; - }; - return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setHttpClientConfigCallback(httpClientConfigCallback).build(); + return getRestClient(properties, true); } /** @@ -125,31 +111,62 @@ public class ChenfengElasticsearchAutoConfiguration { @Bean @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "false", matchIfMissing = true) public RestClient getRestClient(EsProperties properties) { - return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setRequestConfigCallback(requestConfigBuilder -> { - requestConfigBuilder.setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()); - requestConfigBuilder.setSocketTimeout(properties.getSocketTimeout().toSecondsPart()); - requestConfigBuilder.setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()); - return requestConfigBuilder; - }).build(); + return getRestClient(properties, false); + } + + /** + * 动态获取es client连接 + * + * @param properties 配置 + * @param needDecrypt 敏感信息是否需要解密 + * @return + */ + private RestClient getRestClient(EsProperties properties, boolean needDecrypt) { + // 配置账号密码 + CredentialsProvider credentialsProvider; + String username = properties.getUsername(); + String password = properties.getPassword(); + if (CharSequenceUtil.isAllNotEmpty(username, password)) { + credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(needDecrypt ? AesUtils.decrypt(username, publicKey) : username, needDecrypt ? AesUtils.decrypt(password, publicKey) : password)); + } else { + credentialsProvider = null; + } + RestClientBuilder.HttpClientConfigCallback httpClientConfigCallback = httpClientBuilder -> { + // 设置账号密码、连接信息 + HttpAsyncClientBuilder httpAsyncClientBuilder = httpClientBuilder + .setDefaultRequestConfig(RequestConfig.custom() + .setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()) + .setSocketTimeout(properties.getSocketTimeout().toSecondsPart()) + .setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()) + .build()); + if (ObjectUtil.isNotNull(credentialsProvider)) { + httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider); + } + if (properties.isSecurityHttpSslEnable()) { + // 开启ssl配置连接证书 + httpAsyncClientBuilder.setSSLContext(buildSSLContext(properties.getCertificatePath())).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); + } + return httpAsyncClientBuilder; + }; + return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setHttpClientConfigCallback(httpClientConfigCallback).build(); } /** * 构建ssl请求信息 * + * @param certificatePath 证书地址 * @return */ - private SSLContext buildSSLContext() { + private SSLContext buildSSLContext(String certificatePath) { SSLContext sslContext = null; try { - ClassPathResource resource = new ClassPathResource("http_ca.crt"); - CertificateFactory factory = CertificateFactory.getInstance("X.509"); - Certificate trustedCa; - try (InputStream is = resource.getInputStream()) { - trustedCa = factory.generateCertificate(is); - } + Path trustStorePath = Paths.get(certificatePath); KeyStore trustStore = KeyStore.getInstance("pkcs12"); - trustStore.load(null, null); - trustStore.setCertificateEntry("ca", trustedCa); + try (InputStream is = FileUtil.getInputStream(trustStorePath)) { + trustStore.load(is, "elastic".toCharArray()); + } SSLContextBuilder sslContextBuilder = SSLContexts.custom() .loadTrustMaterial(trustStore, null); sslContext = sslContextBuilder.build(); diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java index 5dfd0a99f..2dd90ffe5 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java @@ -42,6 +42,8 @@ public class EsProperties { private boolean securityHttpSslEnable = false; + private String certificatePath; + public String getUris() { return uris; } @@ -105,4 +107,12 @@ public class EsProperties { public void setConnectionRequestTimeout(Duration connectionRequestTimeout) { this.connectionRequestTimeout = connectionRequestTimeout; } + + public String getCertificatePath() { + return certificatePath; + } + + public void setCertificatePath(String certificatePath) { + this.certificatePath = certificatePath; + } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml index ae26569e4..eafa852fc 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml @@ -70,6 +70,10 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. + --- #################### 定时任务相关配置 #################### xxl: job: diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml index 1162b5e8d..feac9db10 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml @@ -70,6 +70,10 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. + --- #################### 定时任务相关配置 #################### xxl: job: