Je suis complètement nouveau dans RestTemplate et, fondamentalement, dans les API REST également. Je souhaite récupérer des données dans mon application via Jira REST, mais je récupère 401 Trouvé et article sur documentation de jira rest api mais je ne sais pas vraiment comment le réécrire dans Java car l'exemple utilise la méthode de ligne de commande avec curl. I apprécierait toute suggestion ou conseil sur la façon de réécrire:
curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" "http://kelpie9:8081/rest/api/2/issue/QA-31"
into Java utilisant un gabarit de repos du ressort. Où le ZnJlZDpmcmVk est une chaîne de nom d'utilisateur codée en base64: mot de passe. Merci beaucoup.
Tiré du exemple sur ce site , je pense que ce serait la façon la plus naturelle de le faire, en remplissant la valeur d'en-tête et en passant l'en-tête au modèle.
C'est pour remplir l'en-tête Authorization
:
String plainCreds = "willie:p@ssword";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
Et ceci consiste à passer l'en-tête au modèle REST:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
Vous pouvez utiliser spring-boot RestTemplateBuilder
@Bean
RestOperations rest(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.basicAuthentication("user", "password").build();
}
Voir documentation
(avant SB 2.1.0 c'était #basicAuthorization
)
(peut-être) le moyen le plus simple sans importer Spring-Boot.
restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
Implémentation de TestRestTemplate
de Spring Spring comme suit:
En particulier, voir la méthode addAuthentication () comme suit:
private void addAuthentication(String username, String password) {
if (username == null) {
return;
}
List<ClientHttpRequestInterceptor> interceptors = Collections
.<ClientHttpRequestInterceptor> singletonList(new BasicAuthorizationInterceptor(
username, password));
setRequestFactory(new InterceptingClientHttpRequestFactory(getRequestFactory(),
interceptors));
}
De même, vous pouvez créer votre propre RestTemplate
facilement
par héritage comme TestRestTemplate
comme suit:
A partir du printemps 5.1, vous pouvez utiliser HttpHeaders.setBasicAuth
En-tête de création d'autorisation de base:
String username = "willie";
String password = ":p@ssword";
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(username, password);
...other headers goes here...
Passez les en-têtes au RestTemplate:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
Au lieu d'instancier comme suit:
TestRestTemplate restTemplate = new TestRestTemplate();
Fais-le comme ça:
TestRestTemplate restTemplate = new TestRestTemplate(user, password);
Cela fonctionne pour moi, j'espère que cela aide!