JSP拒绝未登录用户对URL的直接访问

时间:2010-07-15 13:01:03

标签: jsp authorization

我有一个登录和登录后显示的用户信息页面。如何阻止用户直接访问用户信息页面?如何通过会话实现它?

1 个答案:

答案 0 :(得分:4)

在登录时,将找到的User对象放入会话中。

String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user);
    response.sendRedirect("secured/userpage");
} else {
    request.setAttribute("error", "Unknown username/password combo, please try again");
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}

然后实现Filter,只检查会话中登录用户的存在。

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) {
    chain.doFilter(request, response); // Logged in, so just continue.
} else {
    response.sendRedirect("login"); // Not logged in, redirect to login page.
}

将此过滤器映射到/secured/*的网址格式(或其他任何您想要的内容),并将安全页面(如用户信息页面)放在同一文件夹中。

要注销用户,只需执行session.removeAttribute("user")或更明确地session.invalidate()