Spring RestTemplate でBasic認証
SpringのRestTemplateでBasic認証を求めてくるサーバーに接続する必要がある場合
少し調べたら全てのendpointで
String plainCreds = "username@password"; byte[] plainCredsBytes = plainCreds.getBytes(); byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes); String base64Creds = new String(base64CredsBytes); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Basic " + base64Creds); HttpEntity<String> request = new HttpEntity<String>(headers); ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class); Account account = response.getBody();
てなことをする必要あり、もっと認証をリクエスト時に意識せずに
書ける方法がないか調べてみました。
postForObject使いたかったしね
以下調べた方法
ApacheのHTTP clientを使ってBasic認証を通過するようにしてやる。
AuthScope.ANYにしているところで認証を使うアクションを絞ることもできそうですが、
今回は全てのendpointで必用なのでこれでOK
BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password")); HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider); ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build()); new RestTemplate(factory)
pom.xmlにapache http clientt追加
versionはSpring IOにおまかせ
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>