Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Java高级Rest客户端实现安全弹性搜索_Java_Spring Boot_Security_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elasticsearch High Level Restclient - Fatal编程技术网 elasticsearch,elasticsearch-high-level-restclient,Java,Spring Boot,Security,elasticsearch,Elasticsearch High Level Restclient" /> elasticsearch,elasticsearch-high-level-restclient,Java,Spring Boot,Security,elasticsearch,Elasticsearch High Level Restclient" />

如何通过Java高级Rest客户端实现安全弹性搜索

如何通过Java高级Rest客户端实现安全弹性搜索,java,spring-boot,security,elasticsearch,elasticsearch-high-level-restclient,Java,Spring Boot,Security,elasticsearch,Elasticsearch High Level Restclient,我不熟悉弹性搜索。通过Java高级Rest客户端将我的Spring boot应用程序与弹性搜索集成在一起 我已将JHLRCbean配置如下,它运行良好: @Bean(destroyMethod = "close") public RestHighLevelClient client() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost(

我不熟悉弹性搜索。通过
Java高级Rest客户端
将我的Spring boot应用程序与弹性搜索集成在一起

我已将JHLRCbean配置如下,它运行良好:

@Bean(destroyMethod = "close")
public RestHighLevelClient client() {
  RestHighLevelClient client = new RestHighLevelClient(
      RestClient.builder(new HttpHost("localhost", 9200, "http")));
  return client;
}
开始探索Elasticsearch的安全性,在安装证书和密码后,我通过提供以下属性启用了安全性:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
我可以使用创建的用户名和密码登录kibana,但在通过JHLRC点击任何弹性搜索API时未经授权


在配置
Java高级Rest客户端
以点击安全弹性搜索时,有人能帮我做些什么进一步的更改吗?

您需要包括访问kibana时提供的基本凭据,下面的代码显示您可以在JHLRC中传递用户名和密码

首先,从您的用户名和密码创建编码字符串,您可以使用超级用户
elastic
,它通过使用下面的代码拥有所有访问权限

private String getEncodedString(String username, String password) {
        return HEADER_PREFIX + Base64.getEncoder().encodeToString(
                (username + ":" + password)
                        .getBytes());
    }
现在在您的请求选项中,您将传递auth头,该头将包括从上述方法获得的base 64编码字符串

RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder()
                .addHeader(AUTH_HEADER_NAME, getEncodedString(basicCredentials));
最后,您只需构建上述requestion options builder的对象,并在任何请求中将其传递给客户端,如下所示:

GetResponse getResponse = restHighLevelClient.get(getRequest, builder.build());

在JHLRC中进行了以下更改后,其工作正常:

@Bean(destroyMethod = "close")
  public RestHighLevelClient client() {

    final BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider();
    basicCredentialsProvider
        .setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "password_generated_by_elastic_search"));

    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
            .setHttpClientConfigCallback(new HttpClientConfigCallback() {
              @Override
              public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.disableAuthCaching();
                return httpClientBuilder.setDefaultCredentialsProvider(basicCredentialsProvider);
              }
            })

    );

    return restHighLevelClient;
  }

看起来我们需要在所有的API调用中使用这个。有没有办法通过客户端的定义来配置这个问题?@DevChauhan很好的跟进问题,在这里回答了@DevChauhan不知道为什么你会重复相同的答案,作为这个答案的一部分,我创建一个新帖子的唯一原因是它特定于一个问题(客户端级别的配置)因此,它对社区更具搜索性和价值:)。。。另外,你不应该重复内容,我知道你添加了一些小改动,但这并不重要:)如果你能删除它并进行投票并接受这两个答案就太好了,因为它解决了你的问题:)只是把解决方案放在同一个页面上,而不是有人搜索所有评论。我昨天在看到你的答案之前才发现了这一点!别担心!我接受了你的回答。