Servlets HttpSession invalidate正在重定向到登录页面
嗨,我正在使用servlet过滤器更改每个请求的会话ID,以避免会话固定。我的问题是当doFilter方法结束时,应用程序被重定向到登录页面。我只想使会话失效并创建新会话,而不重定向。我没有其他的过滤器 这是我的doFilter代码:Servlets HttpSession invalidate正在重定向到登录页面,servlets,servlet-filters,session-fixation,Servlets,Servlet Filters,Session Fixation,嗨,我正在使用servlet过滤器更改每个请求的会话ID,以避免会话固定。我的问题是当doFilter方法结束时,应用程序被重定向到登录页面。我只想使会话失效并创建新会话,而不重定向。我没有其他的过滤器 这是我的doFilter代码: HttpSession session= httpServletReq.getSession(); if(session!=null){ User u = session.getAttribute("user"); sessi
HttpSession session= httpServletReq.getSession();
if(session!=null){
User u = session.getAttribute("user");
session.invalidate();
HttpSession newSession = httpServletReq.getSession(true);
newSession.setAttribute("user", u);
}
chain.doFilter(req, resp);
过滤器上的模式是***.xhtml**
为什么我要重定向到登录
是否可以更改筛选器上的会话ID
谢谢您只需要方法
session.invalidate()
调用'session.invalidate()`'时,现有会话将无效
因此,servlet请求将创建到网络的新会话
更改每个请求的会话ID以避免会话固定
您应该这样做,而不是使会话无效。你可以用这个
HttpSession session = httpRequest.getSession(false);
if (session != null) {
httpRequest.changeSessionId();
}
chain.doFilter(request, response);
请注意,默认情况下会自动创建会话,因此它实际上不会返回null
。您需要显式地将false
传递给
也就是说,您不必对每个请求都执行此操作,只需在登录用户时执行即可。感谢您的回答,如果我在使旧会话无效后删除getSession代码,如何将我的用户对象设置为“从请求创建新会话”?在这种情况下,您最好使用请求范围参数而不是会话。因为您希望使现有会话无效,所以这意味着您将不使用该会话。但是,您还需要维护用户数据。这种情况并不常见。因此,我建议如果您想要保留和使用用户数据,那么最好将用户数据保存在HttpServletRequest中(在您的示例中,是httpServletReq)