elasticsearch,spring-data,http-authentication,xml-configuration,Java,elasticsearch,Spring Data,Http Authentication,Xml Configuration" /> elasticsearch,spring-data,http-authentication,xml-configuration,Java,elasticsearch,Spring Data,Http Authentication,Xml Configuration" />

Java Spring中的Elasticsearch HTTP身份验证

Java Spring中的Elasticsearch HTTP身份验证,java,elasticsearch,spring-data,http-authentication,xml-configuration,Java,elasticsearch,Spring Data,Http Authentication,Xml Configuration,我想访问受用户名和密码保护的远程elasticsearch 在Spring中,使用XML配置,我能够访问我的localhost,如下所示 <!-- ElasticSearch --> <elasticsearch:repositories base-package="be.smartsearch.service.repository.elasticsearch" /> <elasticsearch:transport-client id="esClient" cl

我想访问受用户名和密码保护的远程elasticsearch

在Spring中,使用XML配置,我能够访问我的localhost,如下所示

<!-- ElasticSearch -->
<elasticsearch:repositories base-package="be.smartsearch.service.repository.elasticsearch" />

<elasticsearch:transport-client id="esClient" cluster-nodes="localhost:9300" />

<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
  <constructor-arg name="client" ref="esClient" />
</bean>

到目前为止,我发现的唯一有用的文档是针对PHP的:

如何使用XML配置在Spring数据中使用凭据连接到远程elasticsearh

更新1 在Mongo中,我可以通过以下方法完成

<!-- Mongo -->
<mongo:mongo host="${mongo.host}" port="${mongo.port}"/>

<mongo:db-factory dbname="SmartSearchAfterDemo" mongo-ref="mongo" username="${mongo.user}" password="${mongo.password}"/>
<!--<mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongo"/> -->

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>

<mongo:repositories base-package="be.smartsearch.service.repository.mongo"/>

Spring Data Elasticsearch基于官方的Elasticsearch Java客户端,该客户端使用二进制传输程序(而不是像PHP那样的其余HTTP程序)

如果您使用Shield保护Elasticsearch,则可以在传输客户端/Transport程序上设置用户/密码

TransportClient client = TransportClient.builder()
    .addPlugin(ShieldPlugin.class)
    .settings(Settings.builder()
        .put("cluster.name", "yourcluster")
        .put("shield.user", "youruser:yourpassword")
        ...
        .build())
如果您不想使用Java代码中的HTTP协议,那么社区客户端有以下几种方法:

  • 支持
  • 这是非常新的

但这些解决方案与Spring Data不兼容

如果您使用的是ElasticSearch的Docker映像,它附带X-Pack:

以上链接指的是5.5版本,因为这是我回答时Spring Data ElasticSearch支持的版本。 要总结这些链接,您必须遵循以下步骤:

  • 在项目中包括
    org.elasticsearch.client:x-pack-transport
    依赖项。您可能需要在build.gradle/pom.xml中的repositories部分添加此存储库:如下所示:

    存储库{ 马文{ url“” } }

  • 使用X-Pack将您的传输客户端替换为一个:

    import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
    ...
    TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
        .put("cluster.name", "myClusterName")
        .put("xpack.security.user", "transport_client_user:changeme")
        ...
        .build())
    .addTransportAddress(new InetSocketTransportAddress("localhost", 9300))
    .addTransportAddress(new InetSocketTransportAddress("localhost", 9301));
    

  • 重要提示:除了上述HTTP身份验证步骤外,您还应该设置HTTPS连接,以确保密码不会通过网络发送。

    您所说的“这是用于PHP的”是什么意思?这篇文章标题为“HTTP身份验证”,显示的代码使用传输客户端(二进制协议)?@GQuintana他们显示的代码基于Elasticsearch PHP客户端,Spring数据客户端不提供与PHP客户端相同的功能。区别在于PHP客户端使用HTTP协议,Java客户端使用传输协议。@GQuintana您知道如何连接到https://[用户名]:[密码]@aws-eu-west-1-portal1.dblayer.com:11109/在java中?感谢您的明确回答,我不知道它是否在使用Shield,因为这是从租用的服务器,他们刚刚向我提供了证书。我们确实在使用X-Pack,但现在有弹性云。在提出这个问题时,我们已经知道在哪里使用ES2.X了。谢谢你的回答!