【发布时间】:2011-02-13 15:52:10
【问题描述】:
我有一个过滤器和登录 Servlet。我如何检查 - 授权用户与否?如果未授权 - 将他重定向到 Login Servlet。
谢谢。
【问题讨论】:
标签: java servlet-filters
我有一个过滤器和登录 Servlet。我如何检查 - 授权用户与否?如果未授权 - 将他重定向到 Login Servlet。
谢谢。
【问题讨论】:
标签: java servlet-filters
这样做:
当用户登录时,在 HttpSession 中为该用户设置 User 对象。这样,httpRequest.getSession().setAttribute("LOGGED_USER", userObject)
现在,每次您点击过滤器/安全过滤器。你要做的第一件事就是检查这个属性。
如果该属性不存在,则将请求重定向/转发到登录 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
【讨论】:
在过滤器中: 如果 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);
}
}
【讨论】: