2016-05-13 181 views
1

我有一个使用elasticsearch(2.3)与盾的身份验证问题。 elasticsearch实例托管在某个云的某个地方,我没有太多的权限来调整。与java api客户端的elasticsearch认证

我正在使用Sense chrome插件发出测试请求,并在发送第一个请求之前要求输入用户名/密码(我假设它是某种基本HTTP身份验证的REST API接口)。 Sense插件的所有查询都很顺利。

现在,我必须使用Java API在客户端应用程序中对这个实例进行查询。我创建了TransportClient,都喜欢在下面的代码片段:

String hostBasedClusterName = StatsConstants.ES_HOST.split("\\.", 2)[0]; 
String clusterName = System.getProperty("cluster", hostBasedClusterName); 

Settings settings = Settings.settingsBuilder() 
         .put("cluster.name", clusterName) 
         .put("shield.transport.ssl", "true") 
         .put("shield.user", String.format("%s:%s", StatsConstants.ES_USERNAME, StatsConstants.ES_PASSWORD)) 
         .build(); 

client = TransportClient.builder() 
         .addPlugin(ShieldPlugin.class) 
         .settings(settings) 
         .build() 
         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(StatsConstants.ES_HOST), StatsConstants.ES_PORT)); 

基于其他样本和文档,这似乎是罚款。然而,当我试图创建客户端,我得到一个StreamCorruptedException异常:

2016-05-13 13:53:47,396 WARN netty:788 - NettyTransport.java - [Burstarr] exception caught on transport layer [[id: 0x4ac12d10, ...]], closing connection 
java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50) 
     at org.elasticsearch.transport.netty.SizeHeaderFrameDecoder.decode(SizeHeaderFrameDecoder.java:68) 
     at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:425) 
     at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) 
     at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) 

客户端版本2.3.2是使用如在文档中描述的屏蔽客户端的lib,编译是好的,没有警告,它只是在它尝试创建该对象时引发异常。

这似乎是微不足道的一些你 - 但对我来说是我用Java/elasticsearch世界第一潜水......

更新 - 我做了一些更多的挖掘/阅读后,我发现了一个当有人抱怨使用的代理时出现类似的错误/异常。我不使用任何代理服务器,它直接连接到服务器;

+0

为什么使用ssl('put(“shield.transport.ssl”,“true”)')如果集群仅使用HTTP基本身份验证进行配置?删除put(“shield.transport.ssl”,“true”)'并重试。 –

+0

这是一样的。 :(有2种方式连接到弹性服务器 - ssl或no ssl。默认情况下,我使用ssl方式。 – dcg

回答

1

问题解决。在这里添加回应,以减轻一些其他可怜的灵魂的负担...

来自solr背景,我试图连接到相同的端口作为web服务(HTTP/HTTPS)。那是完全错误的。我应该连接到端口9343.