使用Jersey 2客户端+ ApacheConnectorProvider对每个HTTP请求进行HTTP身份验证

时间:2014-03-28 18:02:20

标签: java apache http authentication jersey

我想使用ApacheConnectorProvider对Jersey 2客户端使用HTTP身份验证,但我想为每个请求设置它(而不是ClientConfig属性)。原因是我使用客户端进行多个连接,其中只有一些需要HTTP身份验证。我假设每次我想发送HTTP请求时都不要重新创建Client对象。

到目前为止我发现了:

1)来自https://github.com/jersey/jersey/blob/master/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AuthTest.java

CredentialsProvider credentialsProvider = new org.apache.http.impl.client.BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, 
    new UsernamePasswordCredentials("name", "password")
);

ClientConfig cc = new ClientConfig();
cc.property(ApacheClientProperties.CREDENTIALS_PROVIDER, credentialsProvider).property(ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION, true);
cc.connectorProvider(new ApacheConnectorProvider());
Client client = ClientBuilder.newClient(cc);

WebTarget r = client.target(getBaseUri());
r.request().get(String.class);

这可能会有效,但是当我为多个HTTP请求重用相同的客户端时,并非全部使用HTTP身份验证,我每次发送请求时都需要重新创建一个Client对象。我不知道这是否是一项昂贵的操作,所以它可能是一种解决方案。

2)来自https://jersey.java.net/documentation/latest/client.html#d0e4833

Response response = client.target("http://localhost:8080/rest/homer/contact").request()
    .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, "homer")
    .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, "p1swd745").get();

这似乎不适用于ApacheConnectorProvider。

我的问题的正确解决方案是什么? 谢谢!

0 个答案:

没有答案