为了将用户重定向到我希望会话超时的网址,我最近将以下内容添加到我的spring安全文件中....
当会话在下次单击时到期时,用户将被带到/sessionExpired.htm,这是期望的效果,但是当我导航到登录页面(login.htm)时,我现在遇到问题,我被重定向到invalid-session-url (/sessionExpired.htm).
显然这不是我想要发生的事情.我一直在做一些阅读,其中一个建议的解决方案似乎是删除像这样的jsessionid cookie,并将invalidate-session设置为false(我现在在logout.htm的控制器方法中使会话无效)...
我尝试过,但似乎没有工作.有人可以帮我理解这里发生的事情以及我如何解决?好像当我进入登录页面时,它试图记住我是谁.
谢谢
我在Tomcat中遇到了这个问题(不确定是否只适用于它).
从Tomcat文档(参见此处)我们可以得出结论,为会话cookie生成的路径有一个尾部斜杠:
某些浏览器(例如IE)将为/ foo路径的上下文发送会话cookie,并请求/ foobar.为了防止这种情况,Tomcat将向与会话cookie关联的路径添加尾部斜杠,因此,在上面的示例中,cookie路径变为/ foo /.但是,使用/ foo /的cookie路径,IE将不再向/ foo发送带有请求的cookie.除非有一个servlet映射到/*,否则这应该不是问题.在这种情况下,需要禁用此功能.此属性的默认值为true.要禁用此功能,请将该属性设置为false.
另一方面,spring-security的CookieClearingLogoutHandler将生成一个没有尾部斜杠的cookie路径.set-cookie响应头将被发送到浏览器,但cookie路径将与路径不匹配,因为缺少尾部斜杠.
浏览器不会清除现有的JSESSIONID cookie,因为路径不匹配.
我解决了我实现CookieClearingLogoutHandler的自定义实现的问题.