小编典典

JSP拒绝非登录用户直接访问URL

jsp

我有一个登录名和一个登录后显示的用户信息页面。如何阻止用户信息页面被用户直接访问?如何在会话中实现呢?


阅读 317

收藏
2020-06-08

共1个答案

小编典典

在登录时,将找到的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/*(或您想要的任何其他形式)的URL模式,并将受保护的页面(如用户信息页面)放在同一文件夹中。

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

2020-06-08