2016-12-01 31 views
0

我开发了一个弹簧引导应用程序。当我需要做的REST请求(POST,PUT ...)我每次都使用基本身份验证一样,所有基本身份验证一次

HttpEntity<PostJql> httpEntity = new HttpEntity<PostJql>(post, jiraUtils.getHeader()); 
     ResponseEntity<IssueDataWrapper> response = restTemplate.exchange(urlJiraResponse, HttpMethod.POST, httpEntity, IssueDataWrapper.class); 

有另一种方法在应用程序中做一次时间基本身份验证,然后使用RestTemplate或httpPost { Put/Delete ...}没有基本认证?

致以问候

回答

2

是的。用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进行配置。