会话validationfilter,在会话过期时注销用户

我有一个会话validationfilter,在会话过期时注销用户。

这是一段代码,但这不起作用。 不工作意味着即使会话过期,也不会重定向到登录页面。

请帮我解决这个问题。

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); } } 

我有一个会话validationfilter,在会话过期时注销用户。

这真的没有任何意义。 如果将登录用户存储为会话属性并根据会话中登录用户的存在截获“已登录”状态,则无需手动注销用户会话已过期。 当会话到期时,无论如何它的所有属性都会丢失,因此用户将“自动”注销。

下面是一个示例,说明如何在servlet的doPost()中登录用户,该servlet由登录表单JSP的POST提交调用。

 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. } 

您会看到,当登录有效时,用户将存储为会话属性。 您的代码的残余部分可以检查它是否为空以确定用户是否已登录。每当会话到期时,它将自动变为空。


即使会话过期,也不会重定向到登录页面

我不知道你要做什么,因为最初的function要求毫无意义。 但是,存在与会话到期和登录页面相关的两个常见function要求。 我想你实际上需要其中一个:

  1. “当访问者请求限制为登录用户的页面时,如何将访问者重定向到登录页面?”

    您需要创建一个filter并将其映射到受限页面的(通用)URL模式。 在filter中,只需检查用户是否在会话中,然后继续链,否则重定向到登录页面。

     @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. } } 

  2. “当会话到期时,如何自动将当前打开的页面重定向到登录页面?”

    刷新与HttpSession#getMaxInactiveInterval()结合使用。

      

    每当会话到期时,这将自动将当前页面重定向到给定的url${pageContext.session.maxInactiveInterval}表达式将以秒为单位内联会话到期时间,这正是content属性所需的content