我正在使用Grails Spring Security Plugin 2.0 RC2。
当我通过在登录表单中添加复选框启用(开箱即用的)功能时。
正确创建cookie(提前2周),但在两种情况下,Remember-me机制不起作用:
另外:我不想使用持久性记住我需要在db中存储令牌。我想依靠基于cookie的记住我的策略。
答案 0 :(得分:2)
这困扰了我一整天,但我使用的是Spring Security Plugin 1.2.7.3。
对我而言,配置中缺少身份验证提供程序。例如:
grails.plugins.springsecurity.providerNames = [
'rememberMeAuthenticationProvider',
'daoAuthenticationProvider',
'ldapAuthProvider',
'anonymousAuthenticationProvider']
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] DEBUG rememberme.TokenBasedRememberMeServices - 记住我记住的cookie
2014-01-21 13:10:59,545 [http-bio-8080-exec-3] DEBUG rememberme.TokenBasedRememberMeServices - 记住我接受的cookie
2014-01-21 13:10:59,582 [http-bio-8080-exec-3] DEBUG rememberme.RememberMeAuthenticationFilter - SecurityContextHolder没有 由AuthenticationManager拒绝,填充了remember-me令牌 RememberMeServices返回的身份验证: “org.springframework.security.authentication.RememberMeAuthenticationToken@7651888e: 主要: org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser@d008d6e3: 使记住我的令牌无效
消息:找不到org.springframework.security.authentication.RememberMeAuthenticationToken
的AuthenticationProvider2014-01-21 13:10:59,638 [http-bio-8080-exec-3] DEBUG rememberme.TokenBasedRememberMeServices - 交互式登录尝试 没成功。
2014-01-21 13:10:59,638 [http-bio-8080-exec-3] DEBUG rememberme.TokenBasedRememberMeServices - 取消cookie
作为fyi,删除JSESSIONID cookie与关闭浏览器基本相同:http://muras.eu/index.html%3Fp=673.html
希望有所帮助!
答案 1 :(得分:0)
让我感到困惑的是,我还为某些登录安装了Spring Security Open ID插件。除非您使用持久性SpringSecurityOpenidGrailsPlugin
,否则会将记住我的功能更改为rememberMe
文件中的无操作:
if (!conf.rememberMe.persistent) {
// auth is external, so no password, so regular cookie isn't possible
rememberMeServices(NullLogoutHandlerRememberMeServices)
}
如果您在GrailsRememberMeAuthenticationFilter
中进行调试并看到注入的rememberMeServices
对象是NullLogoutHanderlRememberMeServices
对象,那么您就知道发生了什么。该版本将所有操作都视为无操作。
您希望内存中TokenBasedRememberMeServices
或持久PersistentTokenBasedRememberMeServices
能够实际运行。