secure exchange example auth java spring resttemplate jira-rest-api

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:

https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/java/org/springframework/boot/test/TestRestTemplate.java

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:

https://github.com/izeye/samples-spring-boot-branches/blob/rest-and-actuator-with-security/src/main/java/samples/springboot/util/BasicAuthRestTemplate.java