由于需要访问到第三方的接口并把接收到的数据存入自己项目的数据库中,所以使用到restTemplate来处理,这里模拟一个环境。
环境:第三方给你用户和密码,你需要获取所对应第三方生成的token来进行验证
模拟第三方数据接口的Controller
@Slf4j
@RestController
public class GetApiController {
@Autowired
JdbcTemplate jdbcTemplate;
@RequestMapping("/getToken")
public String getApiToken(String userId,String userPwd){
String sql="select token from gxhy_login where user_id='"+userId+"'"+" and user_pwd='"+userPwd+"'";
log.info(sql);
try {
String token = jdbcTemplate.queryForObject(sql, String.class);
return token;
}catch (Exception e){
log.error("获取失败", e);
return "worry";
}
}
}
我方访问第三方接口Controller
@Slf4j
@RestController
@RequestMapping("/api/gxhy")
public class RestTemplateController {
@Value("${user.id}")
private String user;
@Value("${user.password}")
private String password;
@RequestMapping("/getToken")
public String getTestMsg(){
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8081/getToken?userId="+user+"&userPwd="+password;
log.info(url);
try {
String response=restTemplate.getForObject(url,String.class);
log.info(response);
Constants.TOKEN_CODE=response;
Constants.TOKEN_TIME=new Date().getTime();
if(Constants.isToken()){
log.info("未超时!");
}else
log.info("超时!");
return Constants.TOKEN_CODE;
} catch (Exception e){
log.error("获取api接口数据失败",e);
return "获取api接口数据失败";
}
}
}
我这里模拟了一个常量token方便后续对于第三方权限数据的其他访问
public class Constants {
public static String TOKEN_CODE="";
public static long TOKEN_TIME;
public static boolean isToken(){
if(StringUtils.isNotBlank(TOKEN_CODE)){
long now=new Date().getTime();
if(now-TOKEN_TIME<3600000)
return true;
else
return false;
}
return false;
}
}
最后感谢大佬康哥的简单记录下RestTemplate 中postForObject调用例子文章的帮助!