发表于: 2017-11-20 23:24:20
1 684
今天完成的事情:
解决了昨天微信端登录的一个BUG
BUG:
从微信公众号的自定义菜单跳转进去之后,使用刷新功能网页会报错
报错:
因为这个页面是需要从微信API给的地址跳转的,所以刷新相当于直接键入这个网址,没有给微信API参数,获取不到openid,因此报错
这样是不行的,因为在项目中的页面随时有可能刷新,因此要把它改成刷新也没有问题
@RequestMapping(value = "/oauth", method = RequestMethod.GET)
public ModelAndView weixinOAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
//得到code
String CODE = request.getParameter("code");
String openid = WeChatUtil.getOpenid(CODE);
String token = TokenUtil.makeToken(openid);
response.addCookie(CookieUtil.createCookie("token", token, 60 * 60 * 24));
Cookie cookie =CookieUtil.getCookieByName(request, "token");
if (cookie == null) {
logger.info("cookie is null");
} else {
logger.info("cookie is not null");
}
return new ModelAndView("redirect:/u/home");
}
昨天我们知道了微信端公众号的网页也是普通的web,可以使用cookie
将openid存入加密为token,放到cookie中,并重定向至/u/home控制器
注:这个token可以设置过期时间,并可以将其解密取出openid
拦截器:
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有URL中包含/u/的请求 -->
<mvc:mapping path="/u/**"/>
<bean class="cn.summerwaves.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
拦截/u/**
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Cookie token = CookieUtil.getCookieByName(httpServletRequest, "token");
if (token == null || !TokenUtil.checkToken(token.getValue())) {
if (token != null) {
token.setMaxAge(0);
httpServletResponse.addCookie(token);
}
httpServletRequest.getRequestDispatcher("/redirect").forward(httpServletRequest, httpServletResponse);
return false;
}
return true;
}
拦截逻辑,若token为空,则跳转至/redirect控制器(重定向至登录控制器),重新登录
若token是不正确的(伪造或其他原因)或token已过期,则删除存放token的cookie,并跳转至/redirect控制器
若验证通过,则当做什么事情都没发生,继续/u/home的操作
@RequestMapping(value = "/u/home")
public ModelAndView toHome(HttpServletRequest request) throws Exception {
ModelAndView mv = new ModelAndView();
Cookie token = CookieUtil.getCookieByName(request, "token");
String openid = TokenUtil.getUsernameInToken(token.getValue());
wcUser user = WeChatUtil.getUserMessage(openid);
mv.addObject("user", user);
mv.setViewName("message");
return mv;
}
从cookie中取出token,解密并获取用户的openid,使用openid获取用户的信息
点击刷新
不再报错,并且能获取用户信息
明天计划的事情:
1.禅道的使用还没看,复习以下SVN的使用还有开发流程以及职业素养
2.开始开发环境部署事宜
遇到的问题:
若是项目中已有相同功能的工具类,不知道自己还是否能使用自己的工具类
收获:
登录功能已完善,项目随时可以对接登录功能、
进度:
11.23日进行复盘评审
评论