ElasticSearch添加xpack认证

一、新增xpack依赖包
由于xpack包需要从es的私服仓库下载,在data-platform-parent工程下的pom.xml新增如下:

<properties>
    <x-pack-transport.version>5.5.3</x-pack-transport.version>
</properties>

<repositories>
    <repository>
        <id>elasticsearch-releases</id>
        <url>https://artifacts.elastic.co/maven</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>x-pack-transport</artifactId>
            <version>${x-pack-transport.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

二、 在其他工程中引用
以bus为例,在message-bus工程pom.xml新增如下:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>x-pack-transport</artifactId>
</dependency>

 然后 进入工程 执行

mvn clean install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

 三、es整合xpack实现
application.yml 配置
由于需要整合xpack,则需要重新申明es client,由于原来是直接整合springboot,则去掉application.yml中es配置:

新增如下配置 

#自定义常量,先定义,后复用
framework:
  #es配置
  elasticsearch:
    #es 集群名
    #cluster-name: es-cluster
    cluster-name: docker-cluster
    #es tcp的端口 多个用逗号隔开 192.168.81.5:9300,192.168.81.5:9300
    cluster-nodes-tcp: 192.168.6.77:9300
    #cluster-nodes-tcp: 192.168.81.6:9310
    #es http的端口 多个用逗号隔开 192.168.81.5:9200,192.168.81.5:9200
    #cluster-nodes-http: 192.168.81.5:9200
    #是否启用xpack认证
    xpack-security-enable: false
    xpack-security-user-pwd: elastic:linewell@2019
    xpack-security-transport-ssl-enable: true
    xpack-security-transport-ssl-certificate-authorities: classpath:cert/ca.crt
    xpack-security-transport-ssl-key: classpath:cert/elasticsearch.key
    xpack-security-transport-ssl-certificate: classpath:cert/elasticsearch.crt

 说明:如果不需要xpcak认证,则只需要将设置 xpack-security-enable: false

要重新申明es client,重新初始化TransportClient 以及ElasticsearchTemplate
具体实现如下: 

@Configuration
public class ElasticsearchClientConfig {

    @Value("${framework.elasticsearch.cluster-name:}")
    private String clusterName;

    @Value("${framework.elasticsearch.cluster-nodes-tcp:}")
    private String tcpClusterNodes;

    @Value("${framework.elasticsearch.xpack-security-enable:false}")
    private boolean xpackSecurityEnable;

    @Value("${framework.elasticsearch.xpack-security-user-pwd:}")
    private String xpackSecurityUserPwd;

    @Value("${framework.elasticsearch.xpack-security-transport-ssl-enable:false}")
    private boolean xpackSecurityTsslEnable;

    @Value("${framework.elasticsearch.xpack-security-transport-ssl-certificate-authorities:classpath:cert/ca.crt}")
    private String xpackSecurityTsslAuthoritiesCert;

    @Value("${framework.elasticsearch.xpack-security-transport-ssl-key:classpath:cert/elasticsearch.key}")
    private String xpackSecurityTsslKey;

    @Value("${framework.elasticsearch.xpack-security-transport-ssl-certificate:classpath:cert/classpath:cert/elasticsearch.crt}")
    private String xpackSecurityTsslCert;


    @Bean
    public TransportClient transportClient() throws Exception  {

        System.setProperty("es.set.netty.runtime.available.processors", "false");

        Settings.Builder SettingsBuilder = Settings.builder()
                .put("cluster.name", clusterName)
                .put("xpack.security.enabled", xpackSecurityEnable);
        //.put("client.transport.sniff", true) //使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中。这样做的好处是,一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。
        //开启xpack认证
        if(xpackSecurityEnable) {
            //认证账号/密码
            SettingsBuilder.put("xpack.security.user", xpackSecurityUserPwd);
            //开启ssl认证协议
            if (xpackSecurityTsslEnable) {
                File authoritiesCertFile = ResourceUtils.getFile(xpackSecurityTsslAuthoritiesCert);
                File esTransportKeyFile = ResourceUtils.getFile(xpackSecurityTsslKey);
                File esTransportCerFile = ResourceUtils.getFile(xpackSecurityTsslCert);
                SettingsBuilder
                        //是否开启ssl认证协议
                        .put("xpack.security.transport.ssl.enabled", xpackSecurityTsslEnable)
                        //ssl证书模式
                        .put("xpack.security.transport.ssl.verification_mode", "certificate")
                        //ssl身份认证证书
                        .put("xpack.security.transport.ssl.certificate_authorities", authoritiesCertFile.getPath())
                        //ssl key
                        .put("xpack.security.transport.ssl.key", esTransportKeyFile.getPath())
                        //ssl 认证证书
                        .put("xpack.security.transport.ssl.certificate", esTransportCerFile.getPath());
            }
        }

        TransportClient client = new PreBuiltXPackTransportClient(SettingsBuilder.build());
        String[] tcpClusterNodesArr = tcpClusterNodes.split(",");
        for (String nodes : tcpClusterNodesArr) {
            String InetSocket [] = nodes.split(":");
            String address = InetSocket[0];
            Integer port = Integer.valueOf(InetSocket[1]);
            client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(address), port));
        }
        return client;
    }

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() throws  Exception {
        return new ElasticsearchTemplate(transportClient());
    }

}

 其他代码保持不变即可。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值