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.xmlapache http clientt追加
versionはSpring IOにおまかせ

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
</dependency>