私はRestTemplateと基本的にREST APIもまったく新しいです。 Jira REST APIを使用してアプリケーションのデータを取得したいが、401 Unauthorizedを取得したい。 jira rest api documentation に関する記事が見つかりましたが、例ではcurlでコマンドラインを使用しているため、これをJavaに書き換える方法はわかりません。書き換えの提案やアドバイスをいただければ幸いです。
curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" "http://kelpie9:8081/rest/api/2/issue/QA-31"
スプリングレストテンプレートを使用してJavaに。 ZnJlZDpmcmVkは、username:passwordのbase64エンコード文字列です。どうもありがとうございました。
このサイトの例 から取られた、ヘッダー値を入力してヘッダーをテンプレートに渡すことにより、これが最も自然な方法だと思います。
これは、ヘッダー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.basicAuthentication("user", "password").build();
}
ドキュメント を参照してください
(SB 2.1.0より前は#basicAuthorization
でした)
(おそらく)spring-bootをインポートしない最も簡単な方法。
restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
次のように、Spring Bootの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
のような継承による:
Spring 5.1以降、HttpHeaders.setBasicAuth
を使用できます
基本認証ヘッダーを作成します。
String username = "willie";
String password = ":p@ssword";
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(username, password);
...other headers goes here...
ヘッダーをRestTemplateに渡します。
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
次のようにインスタンス化する代わりに:
TestRestTemplate restTemplate = new TestRestTemplate();
このようにしてください:
TestRestTemplate restTemplate = new TestRestTemplate(user, password);
それは私のために働く、私はそれが役立つことを願っています!