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"; }