使用java api客户端进行elasticsearch身份验证

时间:2016-05-13 12:24:55

标签: java elasticsearch elasticsearch-shield

我使用带有shield的elasticsearch(2.3)有一个身份验证问题。 elasticsearch实例托管在云端的某个地方,我没有太多的调整访问权限。

我正在使用Sense chrome-plugin来发出测试请求,就在发送第一个请求之前,它要求输入username / pwd(我假设它是REST api接口的某种基本HTTP Auth)。使用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,使用文档中描述的屏蔽客户端库,编译很好,没有警告,只是当它试图创建该对象时,它会引发异常。

对于你们中的一些人来说这似乎是微不足道的 - 但对我而言,这是我在Java / elasticsearch世界的第一次潜水......

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

1 个答案:

答案 0 :(得分:2)

Problem solved. Adding here the response to ease the burden on some other poor soul ...

Coming from a solr background, I was trying to connect to the same port as the webservice (http/https). Well, that was totally wrong. I should have connected to port 9343.