java通过shield链接Elasticsearch

java

本文mark了springboot中集成elasticsearch,并且实现连接带有shield权限管理的elasticsearch的方法。

tips:首先建议java client版本和elasticsearch版本一致。不然可能会出现各种问题。

1、首先在pom中加入如下依赖

<repositories>

<repository>

<id>elasticsearch-releases</id>

<url>https://maven.elasticsearch.org/releases</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

<dependencies>

<dependency>

<groupId>org.elasticsearch.plugin</groupId>

<artifactId>shield</artifactId>

<version>2.3.3</version>

</dependency>

<dependency>

<groupId>org.elasticsearch</groupId>

<artifactId>elasticsearch</artifactId>

<version>2.3.3</version>

</dependency>

</dependencies>

2、其次编写ESClient类,实现ES连接

1)这里需要注意的是语法TransportClient.builder().addPlugin(ShieldPlugin.class),激活shield插件,不然还是会爆noNodesAvailable,小心。

2)java连接elasticsearch和python不一样,java使用的tcp端口,一般是8300,而python使用的是web端口,一般是9300。

3)一般会关闭嗅探,sniff=false。不然可能会报noNodesAvailable。

package com.xiaoju.dqa.sentinel.client.es;

import org.elasticsearch.client.Client;

import org.elasticsearch.client.transport.TransportClient;

import org.elasticsearch.common.settings.Settings;

import org.elasticsearch.common.transport.InetSocketTransportAddress;

import org.elasticsearch.common.transport.TransportAddress;

import org.elasticsearch.shield.ShieldPlugin;

import java.io.IOException;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.util.ArrayList;

import java.util.List;

public class ESClient {

private TransportClient client;

private String cluster;

private String addressListString;

private boolean sniff;

private String shield;

public void setCluster(String cluster) {

this.cluster = cluster;

}

public void setAddressListStr(String addressListString) {

this.addressListString = addressListString;

}

public void setSniff(boolean sniff) {

this.sniff = sniff;

}

public void setShield(String shield) {

this.shield = shield;

}

public void init() throws Exception{

try {

Settings settings = getSettings();

TransportClient transportClient = null;

transportClient = TransportClient.builder().addPlugin(ShieldPlugin.class).settings(settings).build();

List<TransportAddress> addressList = getAddressList(addressListString);

for (TransportAddress address : addressList) {

transportClient.addTransportAddress(address);

}

this.client = transportClient;

} catch (IOException ex) {

throw ex;

} catch (Exception ex) {

throw ex;

}

}

public void close() throws Exception {

if (client != null) {

client.close();

}

client = null;

}

public Client getClient() {

if (this.client == null) {

throw new UnsupportedOperationException("client is not init");

}

return this.client;

}

private Settings getSettings() throws Exception {

Settings.Builder settingBuilder = Settings.settingsBuilder();

settingBuilder.put("cluster.name", cluster);

settingBuilder.put("shield.user", shield);

settingBuilder.put("client.transport.sniff", sniff);

settingBuilder.put("transport.address.list", addressListString);

return settingBuilder.build();

}

private synchronized List<TransportAddress> getAddressList(String addressListString)

throws UnknownHostException {

List<TransportAddress> addressList = new ArrayList<TransportAddress>();

if (addressListString != null && !addressListString.trim().isEmpty()) {

try {

String[] addressStringArray = addressListString.trim().split(

",");

for (String addressString : addressStringArray) {

String[] pair = addressString.trim().split(":");

String host = pair[0].trim();

int port = Integer.parseInt(pair[1].trim());

addressList.add(new InetSocketTransportAddress(InetAddress

.getByName(host), port));

}

} catch (Exception e) {

throw new IllegalArgumentException(

"transport.address.list has invalid format");

}

}

return addressList;

}

}

3、configuration

实现配置和实例化,注意esClient.setShield(shield);

shield格式如下:es.shield.user=98:qHa3pehd用户名:密码

package com.xiaoju.dqa.sentinel.configuration;

import com.xiaoju.dqa.sentinel.client.es.ESClient;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class ESConfiguration {

@Value("${es.cluster.name}")

private String cluster;

@Value("${es.client.transport.sniff}")

private boolean sniff;

@Value("${es.transport.address.list}")

private String addressListString;

@Value("${es.shield.user}")

private String shield;

@Bean(initMethod = "init", destroyMethod = "close")

public ESClient esClient() {

ESClient esClient = new ESClient();

esClient.setCluster(cluster);

esClient.setSniff(sniff);

esClient.setAddressListStr(addressListString);

esClient.setShield(shield);

return esClient;

}

}

4、配置文件

#  **********  ES 配置  **********

es.cluster.name=bigdata-arius-vip

es.client.transport.sniff=false

es.transport.address.list=bigdata-arius-ser200.gz01:8300,bigdata-arius-ser201.gz01:8300,bigdata-arius-ser202.gz01:8300,bigdata-arius-ser203.gz01:8300,bigdata-arius-ser204.gz01:8300,bigdata-arius-ser205.gz01:8300,bigdata-arius-ser206.gz01:8300

es.shield.user=98:qHa3pehd

以上是 java通过shield链接Elasticsearch 的全部内容, 来源链接: utcz.com/z/389858.html

回到顶部