java - exchange - spring resttemplate token authentication
Autenticación básica para REST API utilizando spring restTemplate (5)
Soy completamente nuevo en RestTemplate y básicamente también en las API REST. Quiero recuperar algunos datos en mi aplicación a través de la API REST de Jira, pero obtengo el 401 No autorizado. Encontrado y artículo sobre la documentación de jira rest api, pero realmente no sé cómo reescribir esto en java ya que el ejemplo usa la línea de comando con curl. Agradecería cualquier sugerencia o consejo sobre cómo reescribir:
curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" "http://kelpie9:8081/rest/api/2/issue/QA-31"
en java usando la plantilla de descanso de primavera. Donde ZnJlZDpmcmVk es una cadena codificada en base64 de nombre de usuario: contraseña. Muchas gracias.
(tal vez) la manera más fácil sin importar spring-boot.
restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
En lugar de crear instancias de la siguiente manera:
TestRestTemplate restTemplate = new TestRestTemplate();
Solo hazlo así:
TestRestTemplate restTemplate = new TestRestTemplate(user, password);
Funciona para mí, ¡espero que ayude!
Puede usar Spring-boot RestTemplateBuilder
@Bean
RestOperations rest(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.basicAuthorization("user", "password").build();
}
Ver documentation
Tomado del ejemplo en este sitio , creo que esta sería la forma más natural de hacerlo, rellenando el valor del encabezado y pasando el encabezado a la plantilla.
Esto es para completar el encabezado 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);
Y esto es para pasar el encabezado a la plantilla REST:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
TestRestTemplate
implementación TestRestTemplate
Spring Boot de la siguiente manera:
Especialmente, vea el método addAuthentication () de la siguiente manera:
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));
}
Del mismo modo, puede hacer su propia RestTemplate
fácilmente
por herencia como TestRestTemplate
siguiente manera: