使用SpringSecurity退出登录之后做了session失效的方法,前端重定向到登录界面,然后再请求的时候会提示触发session过期,请问是什么原因呀~
该回答引用ChatGPT
这可能是因为您的应用程序在使用 Spring Security 进行身份验证时,仍然具有保留的会话信息或cookie信息,导致再次请求时仍然具有旧的 session id 或 cookie id。
为了彻底使 session 失效并清除任何相关的 cookie 信息,您可以在退出登录后,使用以下代码:
@RequestMapping("/logout")
public String logoutPage(HttpServletRequest request, HttpServletResponse response) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){
new SecurityContextLogoutHandler().logout(request, response, auth);
}
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
// 清除任何相关的cookie信息
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("JSESSIONID")) {
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
break;
}
}
}
return "redirect:/login";
}
该代码通过在后台手动清除 session 和 cookie 信息来确保用户完全退出登录状态。 在这种情况下,重新登录将创建一个新的 session 和 cookie,并避免了在新的请求中使用旧的 session 或 cookie。