如何修复“无效的记住我令牌(系列/令牌)不匹配”错误?

时间:2013-07-02 12:09:46

标签: spring grails spring-security grails-2.0 remember-me

我使用Spring Security持久登录。我坚持在我的数据库中记住我的令牌。有时我会收到以下错误:

| Error 2013-07-02 13:54:14,859 [http-nio-8080-exec-2] ERROR [/buddyis].[gsp]  -  
Servlet.service() for servlet [gsp] in context with path [/buddyis] threw exception
Message: Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
Line | Method
->> 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread 

在我的Config.groovy中:

grails.plugins.springsecurity.logout.handlerNames = [
'rememberMeServices', 'securityContextLogoutHandler', 'mySecurityEventListener'
]
grails.plugins.springsecurity.rememberMe.cookieName = 'RememberMe'
grails.plugins.springsecurity.rememberMe.alwaysRemember = true
grails.plugins.springsecurity.rememberMe.tokenValiditySeconds = 31536000 // 365 days
grails.plugins.springsecurity.rememberMe.key = 'rememberMe'
grails.plugins.springsecurity.rememberMe.persistent = true
grails.plugins.springsecurity.rememberMe.persistentToken.domainClassName = 'mypackage.PersistentLogin'

如何修复此错误?这是什么意思?

1 个答案:

答案 0 :(得分:1)

我在移动网站上遇到了同样的例外情况。 当已登录的用户的http会话记住我到期并且当用户再次访问该网站时,如果存在多个并行(ajax)请求,则会出现此问题。

之所以发生这种情况,是因为第一个并行请求将刷新记忆我令牌和令牌(无效),所有其他请求将与持久令牌不匹配。

所以你没有很多选择来解决这个问题,一个选择就是没有并行请求,但在toady的移动应用程序中,它是不可能的。

我所做的是拥有/我的请求,这是我在启动/加载网络应用程序时所做的第一件事,之后我可以做多个并行请求而不用担心我会遇到这个问题。