这困扰了我一整天,但我使用的是 Spring Security Plugin 1.2.7.3。
对我来说,配置中缺少身份验证提供程序。例如:
grails.plugins.springsecurity.providerNames = [
'rememberMeAuthenticationProvider',
'daoAuthenticationProvider',
'ldapAuthProvider',
'anonymousAuthenticationProvider']
'rememberMeAuthenticationProvider' 是缺少的链接。我在设置日志级别以跟踪与我正在做的事情相关的所有事情时发现了这一点:
trace 'org.springframework.security.web.authentication.rememberme',
'org.springframework.security.web.authentication',
'org.springframework.security.web',
'org.springframework.security'
我在输出中看到了这个(注意粗体):
2014-01-21 13:10:59,490 [http-bio-8080-exec-3] 调试
rememberme.TokenBasedRememberMeServices - 检测到记住我的 cookie
2014-01-21 13:10:59,545 [http-bio-8080-exec-3] 调试
rememberme.TokenBasedRememberMeServices - 接受记住我的 cookie
2014-01-21 13:10:59,582 [http-bio-8080-exec-3] 调试
rememberme.RememberMeAuthenticationFilter - SecurityContextHolder 不是
填充了记住我的令牌,因为 AuthenticationManager 被拒绝
RememberMeServices 返回的身份验证:
'org.springframework.security.authentication.RememberMeAuthenticationToken@7651888e:
主要的:
org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser@d008d6e3:
使记住我的令牌无效
消息:找不到 org.springframework.security.authentication.RememberMeAuthenticationToken 的 AuthenticationProvider
2014-01-21 13:10:59,638 [http-bio-8080-exec-3] 调试
rememberme.TokenBasedRememberMeServices - 交互式登录尝试
失败了。
2014-01-21 13:10:59,638 [http-bio-8080-exec-3] 调试
rememberme.TokenBasedRememberMeServices - 取消 cookie
作为参考,删除 JSESSIONID cookie 本质上与关闭浏览器相同:http://muras.eu/index.html%3Fp=673.html
希望有帮助!