1、过滤器
页面跳转通过servlet的redirect方式跳转。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; Object session = request.getSession().getAttribute(""); if(sessionInfo == null){ String uri = request.getRequestURI(); if(uri.indexOf("/user/login") > 0 ) { //不需要通过微信跳转的请求。如支付通知 notify } else { String params = request.getQueryString(); uri = uri + (StringUtils.isEmpty(params)?"":"?"+params); //将参数拼接到请求上 String appid = ""; // String navigateUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid +"&redirect_uri=" + uri +"&response_type=code&scope=snsapi_base#wechat_redirect"; response.sendRedirect(navigateUrl); return; } } chain.doFilter(request, response); }
2、实现接口 /user/login
login接口主要是获取请求地址的code,从而获取openId.
@RequestMapping(value = "/login") public String login(HttpServletRequest request) { String code = request.getParameter("code"); // TODO 通过code、appId、app_secret获取到用户的openId //TODO 将用户信息添加到session //跳转到最初的页面 return "redirect:" + request.getParameter("redirect"); }
总结:
(1) 这种方式是通过过滤器实现,对访问容器的所有请求都做了过滤,使用了跳转。在小项目中开发快。
(2) 这种方式在前后端分离框架中并不适用。