我有一个会话验证过滤器,可以在会话过期时注销用户。
这是一段代码,但这不起作用。不起作用意味着即使会话过期也不会重定向到登录页面。
请帮我解决这个问题。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession s = req.getSession(false);
if (s==null)
{
//redirect to login page with session expiry message
} else {
chain.doFilter(request, response);
}
}
我有一个会话验证过滤器,可以在会话过期时注销用户。
老实说,这完全没有道理。如果您将登录用户存储为会话的属性,并根据会话中登录用户的存在来拦截“登录”状态,那么您根本不需要在以下情况下手动注销用户:会话已过期。当会话过期时,它的所有属性无论如何都会丢失,因此用户将“自动”注销。
以下是如何登录用户的示例doPost()
of a servlet由登录表单的 POST 提交调用JSP.
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userService.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user); // Login user.
response.sendRedirect("userhome"); // Redirect to user home page.
} else {
request.setAttribute("errormessage", "Unknown login, try again"); // Set error message.
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Redisplay login form.
}
您会看到,当登录有效时,用户将存储为会话属性。代码的剩余部分可以只检查它是否为空,以确定用户是否登录。每当会话过期时,它就会自动变为空。
即使会话过期,这也不会重定向到登录页面
我不知道你想做什么,因为最初的功能要求没有意义。然而,存在与会话过期和登录页面相关的两个常见功能需求。我猜你actually需要其中之一:
-
“当访问者请求仅限登录用户访问的页面时,如何将访问者重定向到登录页面?”
你需要创建一个filter并将其映射到受限制页面的(通用)URL 模式上。在过滤器中,只需检查用户是否存在于会话中,然后继续链,否则重定向到登录页面。
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
response.sendRedirect("login"); // No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
-
“如何在会话过期时自动将当前打开的页面重定向到登录页面?”
Use the <meta>
结合刷新HttpSession#getMaxInactiveInterval().
<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=sessionexpired.jsp">
这将自动将当前页面重定向到给定的url
每当会话过期时。这${pageContext.session.maxInactiveInterval}
表达式将内联会话过期时间(以秒为单位),这正是content
属性需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)