Basic authentication for REST API using spring restTemplate Basic authentication for REST API using spring restTemplate java java

Basic authentication for REST API using spring restTemplate


Taken from the example on this site, I think this would be the most natural way of doing it, by filling in the header value and passing the header to the template.

This is to fill in the header 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);

And this is to pass the header to the REST template:

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


You may use spring-boot RestTemplateBuilder

@BeanRestOperations rest(RestTemplateBuilder restTemplateBuilder) {    return restTemplateBuilder.basicAuthentication("user", "password").build();}

See documentation

(before SB 2.1.0 it was #basicAuthorization)


There are multiple ways to add the basic HTTP authentication to the RestTemplate.

1. For a single request

try {    // request url    String url = "https://jsonplaceholder.typicode.com/posts";    // create auth credentials    String authStr = "username:password";    String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes());    // create headers    HttpHeaders headers = new HttpHeaders();    headers.add("Authorization", "Basic " + base64Creds);    // create request    HttpEntity request = new HttpEntity(headers);    // make a request    ResponseEntity<String> response = new RestTemplate().exchange(url, HttpMethod.GET, request, String.class);    // get JSON response    String json = response.getBody();} catch (Exception ex) {    ex.printStackTrace();}

If you are using Spring 5.1 or higher, it is no longer required to manually set the authorization header. Use headers.setBasicAuth() method instead:

// create headersHttpHeaders headers = new HttpHeaders();headers.setBasicAuth("username", "password");

2. For a group of requests

@Servicepublic class RestService {    private final RestTemplate restTemplate;    public RestService(RestTemplateBuilder restTemplateBuilder) {        this.restTemplate = restTemplateBuilder                .basicAuthentication("username", "password")                .build();    }   // use `restTemplate` instance here}

3. For each and every request

@BeanRestOperations restTemplateBuilder(RestTemplateBuilder restTemplateBuilder) {    return restTemplateBuilder.basicAuthentication("username", "password").build();}

I hope it helps!