【问题标题】:How to check user authorized with filter如何使用过滤器检查用户授权
【发布时间】:2011-02-13 15:52:10
【问题描述】:

我有一个过滤器和登录 Servlet。我如何检查 - 授权用户与否?如果未授权 - 将他重定向到 Login Servlet。

谢谢。

【问题讨论】:

    标签: java servlet-filters


    【解决方案1】:

    这样做:

    1. 当用户登录时,在 HttpSession 中为该用户设置 User 对象。这样,httpRequest.getSession().setAttribute("LOGGED_USER", userObject)

    2. 现在,每次您点击过滤器/安全过滤器。你要做的第一件事就是检查这个属性。

    3. 如果该属性不存在,则将请求重定向/转发到登录 servlet。

    伪代码如下所示:

    //in your login servlet, on successful login
    request.getSession().setAttribute("LOGGED_USER", userObject);
    
    //in your security filter
    if(request.getSession().getAttribute("LOGGED_USER") == null){
    //optionally, you may like to check if that attribute has a valid userId as well
         RequestDispatcher rd = request.getRequestDispatcher("relative/path/to/login/servlet")
         rd.forward(request, response);
         return;
    }
    

    编辑 1: 看到这个 http://download.oracle.com/javaee/5/tutorial/doc/bncbx.html

    【讨论】:

      【解决方案2】:

      在过滤器中: 如果 UserObjectInSession 存在 => 用户已登录 ELSE 重定向到 servlet

      在 servlet 中: 如果验证()将是正确的 => 将 UserObjectInSession 放入会话

      public void doFilter(ServletRequest request, ServletResponse response,
              FilterChain chain) throws IOException, ServletException {       
          HttpServletRequest httpReq = (HttpServletRequest) request; 
          HttpServletResponse httpRes = (HttpServletResponse) response;
      
          HttpSession session = httpReq.getSession();
          User currentUser = (User)session.getAttribute("userInSession");
      
          if (currentUser == null) {
              httpRes.sendRedirect("...")    //redirect to LoginServlet
          } else {        
              chain.doFilter(request, response);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-03-24
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多