zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/scode2/p/8866179.html
Copyright © 2011-2022 走看看