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

  • 相关阅读:
    ubuntu root 登录没有声音(waiting for sound system to respond)
    android openVG source prj
    http://source.android.com/ android官网(下载源码及sdk)
    8个优秀的Android开源游戏引擎
    2010開放原始碼創新應用開發大賽 (有很好的源码)
    GIT和repo使用方法:下载内核 android源码包
    Real6410系列教程 android
    [转]Protel布局文件转化为Allegro placement文件
    ubuntu网卡设置
    ubuntu 下安装java6的源
  • 原文地址:https://www.cnblogs.com/scode2/p/8866179.html
Copyright © 2011-2022 走看看