Elasticsearch添加Shield后TransportClient如何连接?

Elasticsearch添加Shield后TransportClient如何连接?

时间 2015-12-28 10:24:01  旁门左道

原文  http://log.medcl.net/item/2015/12/shieldtransportclient-xia-ru-he-shi-yong/

主题 Elastic Search

Shield是Elasticsearch一个安全防护插件,提供了权限访问控制和日志审计功能,企业可以很方便的和LDAP或是ActiveDirectory进行集成,重用现有的安全认证体系.

Elasticsearch使用了Shield后,Elasticsearch就需要权限才能访问了,和默认的调用方式有些不同,下面简单介绍一下HTTP和TCP两种方式的连接.

关于Shield的安装和配置我这里不就具体介绍,创建了一个用户名和密码都是tribe_user的用户,权限是admin.

1.HTTP方式现在直接访问es的http接口就会报错

curl http://localhost:9200
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"shield\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"shield\""}},"status":401}

shield支持HttpBasic验证,所以正确的访问姿势是:

curl -u tribe_user:tribe_user http://localhost:9200
{
  "name" : "Melter",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "805c528f3167980046f224310f9147fa745e5371",
    "build_timestamp" : "2015-12-09T20:23:16Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

如果是浏览器访问的话,第一次访问会弹出验证窗口,后续只要不关闭这个浏览器保持这个session就能一直访问.注意http basic是不安全的认证方式,仅供开发调试使用,生产环境还需要结合HTTPS的加密通道使用.

2.TransportClient方式的访问Shield加防的Elasticsearch,稍微麻烦点,需要依赖Shield的包,步骤如下:2.1 如果你是maven管理的项目,在pom.xml文件里添加Elasticsearch的maven仓库源,如下:

<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>

2.2 添加依赖的配置

<dependency>
   <groupId>org.elasticsearch.plugin</groupId>
   <artifactId>shield</artifactId>
   <version>2.1.1</version>
</dependency

2.3 构建TransportClient的地方增加访问用户的配置

import org.elasticsearch.shield.ShieldPlugin;
import org.elasticsearch.shield.authc.support.SecuredString;
import static
org.elasticsearch.shield.authc.support.UsernamePasswordToken.basicAuthHeaderValue;
String clusterName="elasticsearch";
String ip= "127.0.0.1";
Settings settings = Settings.settingsBuilder()

        .put("cluster.name", clusterName)
         .put("shield.user", "tribe_user:tribe_user")
        .build();
try {
    client = TransportClient.builder()
            .addPlugin(ShieldPlugin.class)
            .settings(settings).build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip),9300));
    String token = basicAuthHeaderValue("tribe_user",
            new SecuredString("tribe_user".toCharArray()));

    client.prepareSearch().putHeader("Authorization", token).get();

} catch (UnknownHostException e) {
    logger.error("es",e);
}
时间: 2024-11-08 17:32:27

Elasticsearch添加Shield后TransportClient如何连接?的相关文章

使用java api操作es需要注意的地方(Elasticsearch开启shield插件之后)

需要执行下面步骤 https://www.elastic.co/guide/en/shield/current/_using_elasticsearch_java_clients_with_shield.html 1:在java项目中的pom文件中添加maven依赖 <repositories> <!-- add the elasticsearch repo --> <repository> <id>elasticsearch-releases</id

禁止开机启动后Oracle 无法连接 、 网络适配器错误 处理

禁止开机启动后Oracle 无法连接, 转来:http://blog.sina.com.cn/s/blog_4aeef1220100fmsr.html TNS-12560: TNS: 协议适配器错误 Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Documents and Settings\user1>lsnrctl LSNRCTL for 32-bit Windows: Version 9.2.0.7

三星RP6818开发板添加应用后分区烧写问题分析

当用三星RP6818开发板添加应用后分区烧写出现问题,可以将应用去掉再烧写测试,可能是应用.环境配置等出了问题. Q:烧写时,partmap我可以改吗?system.img有些大,超过500M了. 但我看这个长度也是足够的,为什么烧写出现unknownerror? 400m烧写的时候没问题. A:未知错误不是长度的问题.system分区足够大的了. Q:应该是什么问题?现在我烧写以前成功过的映像,也不行了,歇菜了. A:清除分区. Q:我看system分区,0x2f200000大约742M左右,

剥开比原看代码02:比原启动后去哪里连接别的节点

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 比原启动后去哪里连接别的节点 最开始我对于这个问题一直有个疑惑:区块链是一个分布式的网络,那么一个节点启动后,它怎么知道去哪里找别的节点从而加入网络呢? 看到代码之后,我才明白,原来在代码中硬编码了一些种子地址,这样在启动的时候,可以先通过种子地址加入网络.虽然整个网络是分布式的,但

Fiddler抓包工具手机添加代理后连不上网

fiddler工具给手机设置代理之后,手机竟然上不了网了,尝试了N种解决方法,终于给解决了,因此,记录下来以备不时之需. 1.fiddler给手机添加代理 打开fiddler工具->Tools->Fiddler Options,记住下面的端口号: 电脑和手机连接同一个网络,确保在一个局域网.电脑端(cmd-ipconfig)查看电脑的ip地址: 其中,ipv4地址就是电脑的ip地址. 手机端设置WLAN种给网络设置代理,选择对应的WLAN,对该网络进行编辑,代理选择手动,主机名填上面电脑ip地

U3D 2D中给精灵添加刚体后 发现精灵会倒 ..

U3D 2D中给精灵添加刚体后 发现精灵会倒 .. 这是因为 没有禁用z轴上面的刚体力造成..只有把刚体上面的 z轴刚体力 冻结掉就可以了 方法一: 红框中Z 复选框勾起来就可以了 方法二 : void Awake() { GetComponent<Rigidbody2D>().freezeRotation = true; }

exsi中的虚拟机添加磁盘后虚拟机中磁盘不出现

exsi中的虚拟机添加磁盘后虚拟机中磁盘不出现解决: 计算机---> 管理: 这里可以选择磁盘,格式,分区, 改盘符等操作

关于DEDECMS自定义模型当中添加自定义字段后在后台添加内容后不显示解决方案

用DEDECMS的时间也不长,最近在做一个站时,就遇到了这个问题(自定义字段在后台不显示内容)中添加自定义字段后在后台编辑打开后发现我之前添加的内容不显示,如果是只是看看不单击确定的话,那么在前台数据的调用就是正常的,但是再次回到后台发现,那个几个字段就是不显示,没办法,在网上查了一下,还是没有找到问题的原因,算了于是自己看了一下他的附加表当中是不是有什么问题,打开后发现了,原来是在数据库里面字段的名是大写(PS:我在添加自定义字段是喜欢首字母大写)应该不会是这个问题吧!于是我把他们改成了小写字

客户端ajax请求为实现Token验证添加headers后导致正常请求变为options跨域请求解决方法

客户端为了实现token认证,通过Jquery的ajaxSetup方法全局配置headers: 全局配置headers后会导致部分不需要token认证的请求变为options请求,导致跨域访问.报错信息如下: CORS概念 支持CORS请求的浏览器一旦发现ajax请求跨域,会对请求做一些特殊处理,对于已经实现CORS接口的服务端,接受请求,并做出回应. 有一种情况比较特殊,如果我们发送的跨域请求为"非简单请求",浏览器会在发出此请求之前首先发送一个请求类型为OPTIONS的"