Java Spring中的Elasticsearch HTTP身份验证
我想访问受用户名和密码保护的远程elasticsearch 在Spring中,使用XML配置,我能够访问我的localhost,如下所示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 -->
<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:
org.elasticsearch.client:x-pack-transport
依赖项。您可能需要在build.gradle/pom.xml中的repositories部分添加此存储库:如下所示:
存储库{
马文{
url“”
}
}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了。谢谢你的回答!