发表于: 2017-11-22 22:38:44
1 621
今天完成的事情:
1.将复盘项目要讲的知识点复习了一遍
①任务中学到的知识点
②对敏捷开发的了解
③对职业素养的了解
④如何使用SVN
⑤如何使用禅道
⑥各任务的深度思考
2.存储微信access_token并反复使用
说明:之前的代码是每访问一次登录页面就重新获取一次access_token,而access_token每日获取是有上限的,现在改成每个小时重新获取一次
检查access_token是否过期
public static Boolean checkAccessToken(AccessToken accessToken) {
long acquireTime = accessToken.getAcquireTime();
long nowTime = System.currentTimeMillis();
long timeGap = nowTime - acquireTime;
if (timeGap < 3600000) {
return true;
} else {
return false;
}
}
数据库中,只有这条数据,如果用户量增大,可以考虑将这个数据放到缓存中
@RequestMapping(value = "/u/home")
public ModelAndView toHome(HttpServletRequest request,HttpServletResponse response) {
ModelAndView mv = new ModelAndView();
//从数据库获取access_token
AccessToken accessTokenObject = userService.selectAccessToken();
String accessTokenValue = accessTokenObject.getAccessToken();
Cookie token = CookieUtil.getCookieByName(request, "token");
String URL;
try {
String openid = TokenUtil.getUsernameInToken(token.getValue());
//检查access_token是否过期,若不过期直接使用,若过期则获取新的access_token并在数据库中更新
if (WeChatUtil.checkAccessToken(accessTokenObject)) {
URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN".replace("ACCESS_TOKEN", accessTokenValue).replace("OPENID", openid);
} else {
String nextAccessToken = WeChatUtil.getAccessToken();
URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN".replace("ACCESS_TOKEN", nextAccessToken).replace("OPENID", openid);
accessTokenObject.setAccessToken(nextAccessToken);
accessTokenObject.setAcquireTime(System.currentTimeMillis());
userService.updateAccessToken(accessTokenObject);
}
logger.info("acessToken:" + accessTokenObject.getAccessToken());
wcUser user = WeChatUtil.getUserMessage(openid,URL);
mv.addObject("user", user);
mv.setViewName("message");
} catch (JSONException jsonObject) {
try {
request.getRequestDispatcher("/redirect").forward(request, response);
logger.error("get a JSONException and reload");
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return mv;
}
效果:
access_token在一定时间内使用的都是同一个,免去了每次使用都会刷新一次,导致access_token达到上限的麻烦
明天计划的事情:
再完善一下复盘中需要的知识点,不然评审的时候出漏子就不好了,还有时间就看下环境部署
遇到的问题:
没有遇到问题
收获:
以上
进度:
明天,即2017-11-23的晚8点进行复盘评审,后天正式进入复盘
评论