我正在使用 Spring Security 3.0.0 和持久的 RememberMe。当服务器重新启动时出现 浏览器窗口仍然打开 ,我们需要能够继续使用该应用程序而无需登录 - 如果选择了记住我。
我收到 org.springframework.security.web.authentication.rememberme.CookieTheftException: Invalid remember-me token (Series/token) mismatch。暗示先前的 cookie 盗窃攻击,当我尝试在服务器重新启动后继续使用该应用程序时。
我注意到的是 processAutoLoginCookie 方法被调用了两次。我不知道为什么。方法本身的行为似乎是正确的,即更新数据库中的 token 并更新客户端中的 cookie。
对此的任何帮助将不胜感激。
谢谢你。
最佳答案
我遇到了完全相同的问题! processAutoLoginCookie 被连续调用两次,因此第一次调用成功,但第二次调用失败,因为第一次调用更新了 cookie。
我唯一的解决方案是子类化 PersistentTokenBasedRememberMeServices
并覆盖 processAutoLoginCookie
方法。我不得不复制 processAutoLoginCookie 的现有代码并注释掉 CookieTheftException
的抛出。 .
注意:我的解决方案会打开一个安全漏洞!
如果您愿意允许发生 Cookie 盗窃(我的系统在内部使用并且不包含敏感数据),那么此解决方案将起作用。
或者,您也可以子类化 PersistentTokenBasedRememberMeServices
并添加一个更强大的解决方案,该解决方案仍会检查 Cookie 盗窃异常,但允许连续两次调用 processAutoLoginCookie
被制造。
关于spring-security - Spring RememberMe 进程AutoLoginCookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727890/