gpt4 book ai didi

java - session 验证过滤器,在 session 过期时注销用户

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:33 27 4
gpt4 key购买 nike

我有一个 session 验证过滤器,它会在 session 过期时注销用户。

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

请帮我解决这个问题。

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

最佳答案

I have a session validation Filter which logs off the user when session is expired.

老实说,这没有任何意义。如果将登录用户存储为 session 的属性并根据 session 中登录用户的存在拦截“已登录”状态,则根本不需要手动注销用户 session 已过期。当 session 过期时,它的所有属性都会丢失,因此用户将“自动”注销。

这是一个如何让用户在 doPost() 中登录的示例的 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.
}

你看,当登录有效时,用户被存储为 session 属性。您的代码的剩余部分可以只检查它是否为 null 以确定用户是否已登录。只要 session 过期,它就会自动变为 null。


this is not redirecting to the login page , even if the session expires

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

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

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

    @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. “如何在 session 过期时自动将当前打开的页面重定向到登录页面?”

    使用 <meta>结合 HttpSession#getMaxInactiveInterval() 刷新.

    <meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=sessionexpired.jsp">

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

关于java - session 验证过滤器,在 session 过期时注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7370885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com