package com.moral.controller; import java.util.Arrays; import java.util.LinkedHashMap; import org.apache.commons.codec.binary.Base64; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.client.RestTemplate; import com.moral.entity.auth.AuthToken; @Controller public class TokenController { private static final String AUTH_SERVER_URI = "http://localhost:8001/oauth/token?grant_type=password&"; @ResponseBody @RequestMapping(value = "/oauth/token/{username}/{password}", method = RequestMethod.GET) public AuthToken get_auth_token(@PathVariable("username") String username, @PathVariable("password") String password) { RestTemplate restTemplate = new RestTemplate(); HttpEntity request = new HttpEntity(getHeadersWithClientCredentials()); ResponseEntity response = restTemplate.exchange(AUTH_SERVER_URI + "username=" + username + "&password=" + password, HttpMethod.POST, request, Object.class); LinkedHashMap map = (LinkedHashMap) response.getBody(); AuthToken token = null; if (map != null) { token = new AuthToken(); token.setAccess_token((String) map.get("access_token")); token.setToken_type((String) map.get("token_type")); token.setRefresh_token((String) map.get("refresh_token")); token.setExpires_in((Integer) map.get("expires_in")); token.setScope((String) map.get("scope")); } return token; } private static HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); return headers; } private static HttpHeaders getHeadersWithClientCredentials() { String plainClientCredentials = "my-trusted-client:secret"; String base64ClientCredentials = new String(Base64.encodeBase64(plainClientCredentials.getBytes())); HttpHeaders headers = getHeaders(); headers.add("Authorization", "Basic " + base64ClientCredentials); return headers; } }