2011-02-13 32 views

回答

4

这样做:

  1. 当用户登录,设置User对象在HttpSession中该用户。这样,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

+0

@Saska更新答案 – Nishant 2011-02-13 17:27:38

2

在过滤器: IF UserObjectInSession存在=>用户登录 否则重定向到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); 
    } 
} 
相关问题