spring - SpringSecurity : Fail to delete JSESSIONID

标签 spring spring-mvc spring-security

用户注销时,我需要删除cookie JSESSIONID。为此,我在安全配置中添加了以下配置:

<http>
    <form-login login-page="/login*" authentication-failure-url="/login?try_again" />
    <http-basic />
    <logout logout-url="/logout" delete-cookies="JSESSIONID" />
    <session-management invalid-session-url="/timeout" />

    <intercept-url pattern="/login*"    access="IS_AUTHENTICATED_ANONYMOUSLY" />

    ...

</http>

但是cookie并没有被删除,而是被复制了:



因此,它一直将浏览器重定向到“/timeout” URL。

我尝试使用Chrome网络浏览器中的开发人员工具来跟踪正在发生的事情,结果发现此Cookie设置了以下响应 header :
Set-Cookie:JSESSIONID=CFF85EA743724F23FDA0317A75CFAD44; Path=/website/; HttpOnly

并使用以下响应 header 删除:
Set-Cookie:JSESSIONID=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/website

我不确定,但似乎原因是这些 header 的“路径”字段中:第一个指向“/website/”,第二个指向“/website”。

是上述麻烦的原因吗?如果不是原因(或不是唯一原因),那么其他原因是什么?我该如何解决这个问题?

最佳答案

您不需要像这样显式删除JSESSIONID cookie。它不是由Spring Security本身管理的,而是由您的servlet容器管理的。默认情况下,Spring Security将在注销时使http session 无效,这又将导致您的servlet容器删除JSESSIONID cookie。

关于spring - SpringSecurity : Fail to delete JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946132/

相关文章:

spring - WebTestClient 未注入(inject)

java - 当整行为空时如何不将数据放入 map 中

rest - Spring MVC 3.1 REST服务post方法返回415

java - Spring : 'org.springframework.beans.factory.UnsatisfiedDependencyException'。使用名称创建 bean 时出错

java - Spring MVC : Using User password to create a Java keystore, 和稍后的访问 key

java - Spring RequestMapping 通配符和后缀

java - maria db 和 hibernate 排序规则的非法混合

java - Spring Thymeleaf TemplateResolver 错误

java - 处理 401 错误(Spring Security)

java - Spring security antMatchers 不适用于 POST 请求,仅适用于 GET