发表于: 2017-11-22 22:38:44

1 620


今天完成的事情:

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点进行复盘评审,后天正式进入复盘



返回列表 返回列表
评论

    分享到