【问题标题】:elasticsearch authentication with java api client使用 java api 客户端进行弹性搜索身份验证
【发布时间】:2016-05-17 19:12:21
【问题描述】:

我在使用带有防护罩的 elasticsearch (2.3) 时遇到了身份验证问题。 elasticsearch 实例托管在云端某处,我没有太多权限进行调整。

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

现在,我必须使用 Java API 在客户端应用程序中对这个实例进行查询。我创建了 TransportClient,就像下面的 sn-p 一样:

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,使用文档中描述的shield客户端库,编译很好,没有警告,只是当它试图创建该对象时,它会抛出异常。

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

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

【问题讨论】:

  • 如果集群仅配置了 HTTP 基本身份验证,为什么还要使用 ssl (put("shield.transport.ssl", "true"))?删除put("shield.transport.ssl", "true"),然后重试。
  • 是一样的。 :( 有 2 种方式连接到弹性服务器 - ssl 或无 ssl。默认情况下,我使用的是 ssl 方式。

标签: java elasticsearch elasticsearch-shield


【解决方案1】:

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

来自 solr 背景,我试图连接到与 web 服务 (http/https) 相同的端口。好吧,那是完全错误的。我应该连接到端口 9343。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 2019-01-07
    • 1970-01-01
    • 2022-10-30
    • 2022-01-18
    • 1970-01-01
    • 2015-10-29
    • 2018-07-05
    相关资源
    最近更新 更多