Spring Data Elasticsearch 和 x-pack 用戶名/密碼驗證鏈接

使用Spring Data Elasticsearch鏈接elasticsearch時,正常狀況下只須要在application.properites文件中添加以下配置便可鏈接:java

spring.data.elasticsearch.repositories.enabled = true
spring.data.elasticsearch.cluster-name = es-cluster
spring.data.elasticsearch.cluster-nodes = 127.0.0.1:9300

以看到Spring Data Elasticsearch鏈接elasticsearch很簡單。node

上面說的是正常狀況,可是有些狀況下鏈接須要驗證。好比安裝x-pack(舊版本的Shield、Marvel等)以後,訪問elasticsearch就須要驗證(未開啓匿名訪問),默認用戶名/密碼是:elastic/changeme,參考官方文檔瞭解更多細節。spring

若是不作相應的修改就會報錯app

org.elasticsearch.transport.RemoteTransportException: [i9Vl_pG][10.111.27.202:9300][cluster:monitor/nodes/liveness]
Caused by: org.elasticsearch.ElasticsearchSecurityException: missing authentication token for action [cluster:monitor/nodes/liveness]
	at org.elasticsearch.xpack.security.support.Exceptions.authenticationError(Exceptions.java:36) ~[na:na]
	at org.elasticsearch.xpack.security.authc.DefaultAuthenticationFailureHandler.missingToken(DefaultAuthenticationFailureHandler.java:74) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$AuditableTransportRequest.anonymousAccessDenied(AuthenticationService.java:541) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.lambda$handleNullToken$17(AuthenticationService.java:357) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.handleNullToken(AuthenticationService.java:362) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.consumeToken(AuthenticationService.java:277) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.lambda$extractToken$7(AuthenticationService.java:249) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.extractToken(AuthenticationService.java:266) ~[na:na]
	at org.elasticsearch.xpack.security.authc.AuthenticationService$Authenticator.lambda$null$0(AuthenticationService.java:201) ~[na:na]
	at org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:60) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.xpack.security.authc.TokenService.getAndValidateToken(TokenService.java:239) ~[na:na]

在這樣的狀況下,Spring Data Elasticsearch 該如何設置才能鏈接到 elasticsearch?目前最新版的 Spring Data Elasticsearch 2.1.6.Release 還不能經過配置的形式來完成。那要如何作,更換TransportClient便可!elasticsearch

修改依賴

<repository>
    <id>elasticsearch-releases</id>
    <url>https://artifacts.elastic.co/maven</url>
    <releases>
        <enabled>true</enabled>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>
...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>x-pack-transport</artifactId>
    <version>5.5.0</version>
</dependency>

x-pack-transport 的版本號保持與elasticsearch一致。maven

從新實例化 TransportClient

@Bean
public TransportClient transportClient() throws UnknownHostException {
    TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
            .put("cluster.name", "es-cluster")
            .put("xpack.security.user", "elastic:changeme")
            .build())
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    return client;
    }

就這麼多,以前屬性文件中的配置能夠刪除了,這樣就能保證鏈接驗證經過。spring-boot

相關文章
相關標籤/搜索