我正在使用Spring Security 3.0.0和持久性RememberMe。当服务器重新启动并且浏览器窗口仍然打开时,我们需要能够继续使用该应用程序而无需登录 - 如果记住我已被选中。
我收到了org.springframework.security.web.authentication.rememberme.CookieTheftException:无效的记住我令牌(系列/令牌)不匹配。当我尝试在服务器重启后继续使用该应用程序时,意味着以前的cookie盗窃攻击。 我注意到processAutoLoginCookie方法被调用两次。我不知道为什么。方法本身的行为似乎是正确的,即更新数据库中的令牌并更新客户端中的cookie。
对此有任何帮助将不胜感激。
谢谢。
答案 0 :(得分:1)
我得到了完全相同的问题! processAutoLoginCookie连续两次被调用,以便第一次调用成功,但第二次调用失败,因为第一次调用更新了cookie。
我唯一的解决方案是继承PersistentTokenBasedRememberMeServices
并覆盖processAutoLoginCookie
方法。我必须复制processAutoLoginCookie的现有代码并注释掉CookieTheftException
的抛出。
注意:我的解决方案会打开一个安全漏洞!
如果您愿意发生Cookie盗窃(我的系统在内部使用且不包含敏感数据),那么此解决方案将有效。
或者,您也可以继承PersistentTokenBasedRememberMeServices
并添加一个更强大的解决方案,该解决方案仍会检查Cookie Theft Exceptions,但允许连续两次调用processAutoLoginCookie
。