在调用接口是 接口里是有token的
但是 如果一个页面 有好几个接口需要调用 token的话 toke值就被覆盖,可能最后请求一个或者两个接口是正常返回数据, 其他接口就会报错,这是应为 你调用接口会验证最新获取的token 所以其他的就会报错,解决
其实有很多办法 比如 存放到redis 或者数据库里 但是token有过期时间 token会失效 所以需要更新,这样的其实比较 费事的,
解决:
其实一个定时任务就可以解决
首先写个静态方法 获取 token 加上定时器让他2分钟或者1分钟执行一次 ,这样也不用担心token会失效了,因为我每个2分钟就更新一次 每次更新都是新的token 在定义一个全局变量,获取静态得到token 之后 需要用到token的地方就直接 放进去就行了
public static String token=null;
@Scheduled(fixedDelay = DataConstants.LLL)
public static String Authorization ()throws JSONException {
String authorization =HttpClient.getToken();
token=authorization;
return authorization;
}
调用示例
@RequestMapping("xxxxxx")
@ResponseBody
public ActionResult getPaperAchievements(String name, String orgName, Integer pageNo, Integer pageSize) throws JSONException {
MultiValueMap<String, String> params1 = new LinkedMultiValueMap<>();
String url = ExpertUtil.EXPERT + orgName + "/" + name + ExpertUtil.EXPERTPAPER + "?" + pageNo + "&" + pageSize;
HttpHeaders headers = new HttpHeaders();
//设置请求头放进token
headers.add("Authorization",token);
System.out.println(token+"------"+1+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
headers.add("AppKey", JournalismUtil.JOURNALISMTOKENAPPKEY);
String paper =null;
try {
paper = HttpClient.sendGETRequest(url, params1, headers);
} catch (Exception e) {
return ActionResult.success(null);
}
return ActionResult.success(paper);
}
然后打印的 token值是一致的 没有出现值不一致的情况