HttpSession 无效正在重定向到登录页面
HttpSession invalidate is redirecting to login page
您好,我正在使用 servlet 过滤器更改每个请求的会话 ID,以避免会话固定。我的问题是当 doFilter 方法结束时,应用程序被重定向到登录页面。我只想使会话无效并创建新会话,而无需重定向。我没有任何其他过滤器。
有我的doFilter代码:
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 请求将创建新的网络会话。
change session ID on every request in order to avoid session fixation
您应该完全这样做,而不是使会话无效。您可以为此使用 HttpServletRequest#changeSessionId()
。
HttpSession session = httpRequest.getSession(false);
if (session != null) {
httpRequest.changeSessionId();
}
chain.doFilter(request, response);
请注意 HttpServletRequest#getSession()
defaults to auto-creating the session, so it actually never returns null
. You need to explicitly pass false
to HttpServletRequest#getSession(boolean)
.
也就是说,您不一定需要对每个请求都执行此操作,仅在您登录用户时执行此操作就足够了。
您好,我正在使用 servlet 过滤器更改每个请求的会话 ID,以避免会话固定。我的问题是当 doFilter 方法结束时,应用程序被重定向到登录页面。我只想使会话无效并创建新会话,而无需重定向。我没有任何其他过滤器。
有我的doFilter代码:
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 请求将创建新的网络会话。
change session ID on every request in order to avoid session fixation
您应该完全这样做,而不是使会话无效。您可以为此使用 HttpServletRequest#changeSessionId()
。
HttpSession session = httpRequest.getSession(false);
if (session != null) {
httpRequest.changeSessionId();
}
chain.doFilter(request, response);
请注意 HttpServletRequest#getSession()
defaults to auto-creating the session, so it actually never returns null
. You need to explicitly pass false
to HttpServletRequest#getSession(boolean)
.
也就是说,您不一定需要对每个请求都执行此操作,仅在您登录用户时执行此操作就足够了。