filter 实现登录状态控制

每天学习一点点 编程PDF电子书、视频教程免费下载:
http://www.shitanlife.com/code

网站需要做用户登录鉴权控制,没有登录的话,不能访问网站,提示需要登录。

实现方式: 使用Filter对每个请求地址进行过滤判断 session ,如果登录状态,则正常访问,否则,跳入提示界面。

实现步骤:

1. 定义过滤器类 LoginFilter 


@Configuration
public class LoginFilter implements Filter
{
  @Autowired
  private RestTemplate restTemplate;

  @Value("${twpaas.gateway.url:http://192.168.102.80:9000}")
  private String gatewayUrl;

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain)
  throws IOException, ServletException
  {
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    HttpServletRequest httpRequest = (HttpServletRequest)request;
    HttpSession session = httpRequest.getSession();

    if(httpRequest.getRequestURI().indexOf("noright") > 0)
    {
      filterchain.doFilter(request, response);
      return;
    }

    if("1".equals(session.getAttribute("loginStatus")))
    {
      // 已登录
      filterchain.doFilter(request, response);
      return;
    }
    else
    {
    if(null != httpRequest.getParameter("token"))
    {
      JSONObject obj = restTemplate.getForEntity(gatewayUrl + "/openapi-uc/uc/getUserByToken/" + httpRequest.getParameter("token"), JSONObject.class).getBody();

      if(null != obj)
      {
        Map<String, Object> entityMap = (Map<String, Object>) obj.get("responseEntity");
        if(null != entityMap)
        {
          String userId = (String) entityMap.get("userId");
          if(null != userId)
          {
            session.setAttribute("loginStatus", "1");
            // 已登录
            filterchain.doFilter(request, response);
            return;
          }
        }
      }
    }
  }

  httpResponse.sendRedirect("/noright");
  return;

  }

  @Override
  public void destroy()
  {
  }

  @Override
  public void init(FilterConfig arg0) throws ServletException
  {
  }

}

2. 加入扫描路径,使用的是springboot, 在启动类中加入扫描路径 @ComponentScan ("xxx.xxx.xxx.**.**.filter")

以上逻辑就完成了。具体请看代码,应该还是看得懂的。

每天学习一点点 编程PDF电子书、视频教程免费下载:
http://www.shitanlife.com/code

原文地址:https://www.cnblogs.com/scode2/p/8866179.html