我想使用ApacheConnectorProvider对Jersey 2客户端使用HTTP身份验证,但我想为每个请求设置它(而不是ClientConfig属性)。原因是我使用客户端进行多个连接,其中只有一些需要HTTP身份验证。我假设每次我想发送HTTP请求时都不要重新创建Client对象。
到目前为止我发现了:
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。
我的问题的正确解决方案是什么? 谢谢!