Базовая аутентификация для 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
реализация следующим образом:
особенно, см. Метод 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 следует:
(возможно) самый простой способ без импорта spring-boot.
restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
вместо создания экземпляра следующим образом:
TestRestTemplate restTemplate = new TestRestTemplate();
просто сделайте это так:
TestRestTemplate restTemplate = new TestRestTemplate(user, password);
это работает для меня, я надеюсь, что это помогает!