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

  • 相关阅读:
    SaveFileDialog
    在SQL Server 2008中配置文件流(FILESTREAM)
    C#中图片转二进制到存储数据库
    OpenFileDialog
    WPF中自定义只能输入数字的TextBox
    QL Server 2008新特性:FILESTREAM
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    winxp+Apache+Mysql+Python+Django安装配置
    django最佳实践
    Sphinx 在 windows 下安装使用
  • 原文地址:https://www.cnblogs.com/scode2/p/8866179.html
Copyright © 2011-2022 走看看