2016-12-01 2 views
0

Ich entwickelte eine Spring-Boot-Anwendung. Wenn ich brauche REST-Anfragen zu tun (POST, PUT ...) Ich mag jedes Mal der Standardauthentifizierung verwenden, dieStandard-Authentifizierung einmal für alle

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

Gibt es eine andere Möglichkeit, grundlegende Authentifizierung einmal Zeit in der Anwendung zu tun und dann RestTemplate oder Httppost verwenden { Setzen/Löschen ...} ohne Basisauthentifizierung?

Mit freundlichen Grüßen

Antwort

2

Ja. Konfigurieren Sie Ihre RestTemplate mit einer ClientHttpRequestFactory, die das tut, was Sie brauchen.

Sie können es einfach im Konstruktor gesetzt:

restTemplate = new RestTemplate(requestFactory); 

... oder Sie können all diese Dinge Bohnen machen und Federdraht es zulassen.

könnten Sie SimpleClientHttpRequestFactory erweitern, zwingende 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; 
    } 
} 

... oder Sie könnten in Apache Httpcomponents als Abhängigkeit bringen und eine HttpComponentsClientHttpRequestFactory verwenden, und konfigurieren Sie die zugrundeliegende Apache HttpClient die Authentifizierung Sie tun müssen. Apache documents this in detail, aber für den Anfang:

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)); 

Nach meiner Erfahrung ist es wert in Apache bringen Httpcomponents, wenn Sie können - es ist zuverlässiger und konfigurierbar ist als der HttpUrlConnection basierte HTTP-Client, dass RestTemplate sonst standardmäßig verwendet. Wenn sich Ihre Anforderungen auf andere Authentifizierungsmethoden, Timeouts, Wiederholungsstrategien usw. ausweiten, werden Sie froh sein, dass Sie eine HttpClient konfigurieren können.

Verwandte Themen