【发布时间】:2013-04-03 11:48:01
【问题描述】:
我需要在用户注销时删除 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 设置了这个响应头:
Set-Cookie:JSESSIONID=CFF85EA743724F23FDA0317A75CFAD44; Path=/website/; HttpOnly
并使用此响应标头删除:
Set-Cookie:JSESSIONID=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/website
我不确定,但似乎原因在于这些标题的“路径”字段:在第一个中它指向“/website/”,而在第二个中它指向“/website ”。
是所描述的问题的原因吗?如果这不是原因(或不是唯一原因),那么其他原因是什么?我该如何解决这个问题?
【问题讨论】:
-
参见static.springsource.org/spring-security/site/docs/3.2.x/…(第 3.3.3 节)...不幸的是,这不能保证适用于每个 servlet 容器,因此您需要在您的环境中对其进行测试。另见相关脚注。
标签: spring spring-mvc spring-security