Базовая аутентификация для REST API с использованием spring restTemplate

Я совершенно новый в RestTemplate и в основном в REST APIs. Я хочу получить некоторые данные в своем приложении через JIRA REST API, но получить обратно 401 несанкционированный. Найдено и Статья на Jira rest api документация но на самом деле не знаю, как переписать это на java, поскольку пример использует путь командной строки с curl. Я бы признателен за любые предложения или советы по перезаписи:

curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" "http://kelpie9:8081/rest/api/2/issue/QA-31"

в java, используя шаблон spring rest. Где ZnJlZDpmcmVk-это строка имени пользователя в кодировке base64: password. Большое спасибо.

5 ответов


взято с пример на этом сайте, Я думаю, что это был бы самый естественный способ сделать это, заполнив значение заголовка и передав заголовок шаблону.

Это для заполнения заголовка 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);

и это должно передать заголовок шаблону REST:

HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();

вы можете использовать spring-boot RestTemplateBuilder

@Bean
RestOperations rest(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.basicAuthorization("user", "password").build();
}

посмотреть документация


ссылка Весна загрузки TestRestTemplate реализация следующим образом:

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

особенно, см. Метод addAuthentication () следующим образом:

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

аналогично, вы можете сделать свой собственный RestTemplate легко

по наследству, как TestRestTemplate as следует:

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


(возможно) самый простой способ без импорта spring-boot.

restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));

вместо создания экземпляра следующим образом:

TestRestTemplate restTemplate = new TestRestTemplate();

просто сделайте это так:

TestRestTemplate restTemplate = new TestRestTemplate(user, password);

это работает для меня, я надеюсь, что это помогает!