java ESClientSpringFactory 连接ES 开启 SSL
时间: 2024-03-09 14:50:27 浏览: 128
elasticsearch开启ssl安全认证和跨集群访问配置
ESClientSpringFactory 是一个基于 Spring 框架的 Elasticsearch 客户端工厂类,可以很方便地使用 Spring 来管理 Elasticsearch 客户端的连接。在开启 SSL 的情况下,我们需要在配置文件中添加相关的 SSL 配置。下面是一个简单的使用 ESClientSpringFactory 连接开启了 SSL 的 Elasticsearch 集群的示例。
1. 首先,我们需要在配置文件中添加 elasticsearch.client 节点,并设置相应的 SSL 参数:
```yaml
elasticsearch:
client:
nodes:
- host: localhost
port: 9200
scheme: https
ssl:
enabled: true
key-store: classpath:client.jks
key-store-password: my_keystore_password
trust-store: classpath:client-truststore.jks
trust-store-password: my_truststore_password
verify-hostname: false
```
上面的配置文件中,我们开启了 SSL 连接,并指定了客户端使用的 key store 和 trust store 的位置和密码。其中,verify-hostname 参数设置为 false,表示不验证服务器的主机名,这在开发和测试阶段是比较方便的,但在生产环境中应该设置为 true。
2. 然后,我们需要定义一个 ESClientSpringFactory 的 Bean,并注入配置文件中的 elasticsearch.client 节点:
```java
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchProperties;
import org.springframework.context.annotation.Bean;
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;
@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Autowired
private ElasticsearchProperties elasticsearchProperties;
@Bean
@Override
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(elasticsearchProperties.getClient().getNodes().get(0).getHost() + ":" + elasticsearchProperties.getClient().getNodes().get(0).getPort())
.withBasicAuth(elasticsearchProperties.getClient().getUsername(), elasticsearchProperties.getClient().getPassword())
.usingSsl()
.withKeyStore(elasticsearchProperties.getClient().getSsl().getKeyStore(), elasticsearchProperties.getClient().getSsl().getKeyStorePassword())
.withTrustStore(elasticsearchProperties.getClient().getSsl().getTrustStore(), elasticsearchProperties.getClient().getSsl().getTrustStorePassword())
.verifyHostnames(elasticsearchProperties.getClient().getSsl().isVerifyHostname())
.build();
return RestClients.create(clientConfiguration).rest();
}
}
```
上面的示例代码中,我们定义了一个名为 elasticsearchClient 的 Bean,并注入了配置文件中的 elasticsearch.client 节点。在 Bean 的实现中,我们使用 ClientConfiguration.builder() 方法来构建一个 Elasticsearch 客户端的配置对象,其中设置了连接地址、认证信息、SSL 相关参数等。最后,我们使用 RestClients.create() 方法来创建一个 RestHighLevelClient 对象,并返回给 Spring 容器来管理。
完成上述步骤后,我们就可以在其他需要使用 Elasticsearch 客户端的地方直接注入 RestHighLevelClient 对象,来操作 Elasticsearch 集群了。
阅读全文