微信公众号开发

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) 这种方式在前后端分离框架中并不适用。   

原文地址:https://www.cnblogs.com/greys/p/10731223.html