1.需求:要调用第三方接口的放回数据,入参为json格式,其中最重要的每个接口都需要t第三方传过来token,但是token 的过期时间是十分钟。为了防止一直请求,把token存到缓存(1)存到session (2)存到redis 。根据项目需要,这里采用的是存session。
如果有调用的,去判断session有没有值,并且是否已经过了9分钟,如果是重新获取。
public static String getToken(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
DataShareDto dataShareToken = (DataShareDto) session.getAttribute("dataShareDto");
if (dataShareToken != null) {
Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();
c.setTime(dataShareToken.getCreateTime());
long lastly = c.getTimeInMillis();
if ((now - lastly) < 540000) {
return dataShareToken.getToken();
} else {
return commonToken(request, response);
}
} else {
return commonToken(request, response);
}
}
public static String commonToken(HttpServletRequest request, HttpServletResponse response) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", USERNAME);
jsonObject.put("password", PASSWORD);
String encoding = "utf-8";
String body = "";
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(URL);
StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(s);
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
CloseableHttpResponse res = client.execute(httpPost);
HttpEntity entity = res.getEntity();
if (entity != null) {
body = EntityUtils.toString(entity, encoding);
}
EntityUtils.consume(entity);
res.close();
JSONObject strs = JSON.parseObject(body);
//String.valueOf(JSON.parse(body))
//json.parse这一步的原因是,返回的json字符创是Unicode编码格式,需要通过json.parse解析成中文格式并h返回
String code = strs.getString("code");
if ("01".equals(code)) {
String data = strs.getString("data");
//把token存到session里面
if (StringUtils.isNotEmpty(data)) {
HttpSession session = request.getSession();
DataShareDto dataShareDto = new DataShareDto();
dataShareDto.setToken(data);
dataShareDto.setCreateTime(new Date());
session.setAttribute("dataShareDto", dataShareDto);
return data;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "00";
}