是的。用ClientHttpRequestFactory
配置您的RestTemplate
,它可以满足您的需求。
你可以设置它在构造函数中:
restTemplate = new RestTemplate(requestFactory);
...或者你可以做所有这些事情豆,让弹簧丝吧。
你可以扩展SimpleClientHttpRequestFactory
,覆盖createRequest()
:
public class BasicAuthSimpleClientHttpRequestFactory
extends SimpleClientHttpRequestFactory {
@Override
public HttpClientRequest createRequest(URI uri, HttpMethod httpMethod) {
HttpClientRequest request = super.createRequest(uri, httpMethod);
HttpHeaders headers = request.getHeaders();
headers.add(... your auth header ...);
return request;
}
}
...或者你可以在Apache中HttpComponents带来的依赖和使用HttpComponentsClientHttpRequestFactory
,并配置底层的Apache HttpClient
做你需要的认证。阿帕奇documents this in detail,而是让你开始:
BasicCredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "password"));
HttpClient client = HttpClientBuilder.create()
.setDefaultCredentialsProvider(credentialsProvider)
.build();
RestTemplate restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory(client));
在我的经验是值得引进阿帕奇HttpComponents如果可以的话 - 它更可靠,比HttpUrlConnection
基于HTTP客户端配置的是RestTemplate
否则默认使用。当您的需求扩展到其他身份验证方法,超时,重试策略等时,您会很高兴您拥有HttpClient
进行配置。