2012-08-15 56 views
1

使用基于Spring Security Core的grails安全插件的rememberme特性。Grails/Spring rememberMe为同一个用户+会话并发处理多个浏览器

我Config.groovy中的相关内容如下:

// Added by the Spring Security Core plugin: 
grails.plugins.springsecurity.userLookup.userDomainClassName = 'org.blah.user.User' 
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'org.blah.user.UserRole' 
grails.plugins.springsecurity.authority.className = 'org.blah.user.Role' 

grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/home' 

grails.plugins.springsecurity.rememberMe.persistent = true 
grails.plugins.springsecurity.rememberMe.persistentToken.domainClassName = 'org.blah.user.PersistentLogin' 

grails.plugins.springsecurity.rememberMe.key = 'blah' 
grails.plugins.springsecurity.rememberMe.alwaysRemember = true 
// set cookie expiration to one year 
grails.plugins.springsecurity.rememberMe.tokenValiditySeconds = 31536000l 

有一个问题会发生什么,当同一用户登录来自多个客户端/浏览器。 我想让cookie在所有浏览器中都能被记住,也就是说每个浏览器都需要一次登录,然后记得前进...... 这是默认行为,如果没有,是如何做到这一点的?

此外,我想执行单个并发登录,即允许从多个地方登录,但限制为每个用户只有一个活动会话。

+0

仅供参考,饼干是每个浏览器。分享它们将是一个巨大的安全漏洞。 – cdeszaq 2012-08-27 13:42:56

回答

1

该插件不会立即执行此操作。在高层次上,您可能需要执行以下操作:

1)编写您自己的记住我身份验证过滤器。 http://www.to-string.com/2012/07/11/springsecurity-capturing-rememberme-success-event/

2)然后您必须更改自己的持久登录令牌以捕获其他一些数据,例如IP地址或浏览器,并将这两者保存在持久登录令牌中

3)编写您自己的记忆我的服务,它扩展了TokenBasedRememberMeServices。你需要覆盖2种方法processAutoLoginCookie和makeTokenSignature最低限度在自己的逻辑添加在resources.groovy与检查饼干

4)线所有的格式在一起......

userDetailsService(com.yourclass.UserDetailsService) 

    customRememberMeServices(com.yourclass.CustomRememberMeServices) { 
     userDetailsService = ref("userDetailsService") 
     key = "key" 
    } 

    rememberMeAuthenticationFilter(com.yourclass.CustomRememberMeAuthenticationFilter) { 
     rememberMeServices = ref('customRememberMeServices') 
     authenticationManager = ref("authenticationManager") 
    } 
0

您正在寻找的是每台计算机身份验证,无论使用的是哪种浏览器,而这仅仅是不可能只能使用安全地使用浏览器并且只能一次登录。

相关问题