基本鉴权
当通过构建器构建一个restClient的时候配置基本鉴权可以通过提供一个HttpClientConfigCallback实现。
这个接口有一个方法,该方法能够接收一个org.apache.http.impl.nio.client.HttpAsyncClientBuilder实例作为一个参数,该方法能返回HttpAsyncClientBuilder类型对象。
这个HttpAsyncClientBuilder能被修改并返回。下面的例子我们设置一个默认的要求基本健全的验证
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "test-user-password"));
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200))
.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider);
}
});
抢先先鉴权能被作废,抢先验证意味着每个请求都能不适用鉴权头文件去通过返回401确认是否被接受
他将会重新发送额外相同的具有基础鉴权头信息的请求,如果你虚妄这么做你能通过HttpAsyncClientBuilder 来作废抢先鉴权
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "test-user-password"));
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200))
.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
httpClientBuilder.disableAuthCaching(); // 作废抢先鉴权
return httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider);
}
});
Elasticsearch Token服务鉴权
如果你想通过一个Elasticsearch access token 来鉴权的话 设置相关的http 请求头文件,如果客户端是单个用户的代理,你能设置需要的鉴权头文件作为一个默认的头文件,如下:
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "http"));
Header[] defaultHeaders =
new Header[]{new BasicHeader("Authorization",
"Bearer u6iuAxZ0RG1Kcm5jVFI4eU4tZU9aVFEwT2F3")};
builder.setDefaultHeaders(defaultHeaders);
Elasticsearch API key 鉴权
如果你想使用一个Elasticsearch API key去鉴权,设置有意义的http 请求头,如果client是单个用户的代理,你能设置需要的鉴权头信息作为默认的头信息,如下:
String apiKeyId = "uqlEyn8B_gQ_jlvwDIvM";
String apiKeySecret = "HxHWk2m4RN-V_qg9cDpuX";
String apiKeyAuth =
Base64.getEncoder().encodeToString(
(apiKeyId + ":" + apiKeySecret)
.getBytes(StandardCharsets.UTF_8));
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "http"));
Header[] defaultHeaders =
new Header[]{new BasicHeader("Authorization",
"ApiKey " + apiKeyAuth)};
builder.setDefaultHeaders(defaultHeaders);