一、注入RestTemplate配置类
/**
* Rest配置类
*/
@Configuration
public class RestTemplateConfiguration {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
二、使用方法
@Service
public class DinersService {
@Resource
private RestTemplate restTemplate;
@Value("${service.name.ms-oauth-server}")
private String oAuthServerName;
@Resource
private OAuth2ClientConfiguration oAuth2ClientConfiguration;
/**
* 登录
* @param account
* @param password
* @param path
* @return
*/
public ResultInfo signIn(String account, String password, String path) {
// 参数校验
AssertUtil.isNotEmpty(account, "请输入账号");
AssertUtil.isNotEmpty(password, "请输入密码");
// 构建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 构建请求体
MultiValueMap body = new LinkedMultiValueMap<>();
body.add("username", account);
body.add("password", password);
body.setAll(BeanUtil.beanToMap(oAuth2ClientConfiguration));
HttpEntity< MultiValueMap> httpEntity = new HttpEntity<>(body, headers);
// 设置Authorization
restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(oAuth2ClientConfiguration.getClientId(),
oAuth2ClientConfiguration.getSecret()));
// 发送请求
ResponseEntity result = restTemplate.postForEntity(oAuthServerName + "/oauth/token", httpEntity, ResultInfo.class);
// 处理返回结果
AssertUtil.isTrue(result.getStatusCode() != HttpStatus.OK);
ResultInfo resultInfo = result.getBody();
if(resultInfo.getCode() != ApiConstant.SUCCESS_CODE){
// 登录失败
resultInfo.setData(resultInfo.getMessage());
return resultInfo;
}
// 将LinkedHashMap转为域对象
OAuthDinerInfo oAuthDinerInfo = BeanUtil.fillBeanWithMap((LinkedHashMap) resultInfo.getData(), new OAuthDinerInfo(), false);
// 根据需求返回视图对象
LoginDinerInfo loginDinerInfo = new LoginDinerInfo();
loginDinerInfo.setUsername(oAuthDinerInfo.getUsername());
loginDinerInfo.setToken(oAuthDinerInfo.getAccessToken());
return ResultInfoUtil.buildSuccess(path, loginDinerInfo);
}
}