1

使用基于 Spring Security Core 的 grails 安全插件的 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,即每个浏览器需要一次登录,然后记住前进...这是默认行为,如果不是,如何实现?

此外,我想强制执行单个并发登录,即允许从多个位置登录,但仅限于每个用户一个活动会话。

4

2 回答 2

1

该插件不是开箱即用的。在高层次上,您可能需要执行以下操作:

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

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

3)编写你自己的remember Me服务,它扩展了TokenBasedRememberMeServices。您需要至少覆盖​​ 2 个方法 processAutoLoginCookie 和 makeTokenSignature 以添加您自己的逻辑来检查 cookie 的格式

4)在resources.groovy中将它们连接在一起......

    userDetailsService(com.yourclass.UserDetailsService)

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

    rememberMeAuthenticationFilter(com.yourclass.CustomRememberMeAuthenticationFilter) {
        rememberMeServices = ref('customRememberMeServices')
        authenticationManager = ref("authenticationManager")
    }
于 2012-08-26T13:20:17.997 回答
0

您正在寻找的是每台计算机的身份验证,而与使用的浏览器无关,而仅使用浏览器并仅登录一次是不可能安全做到这一点的。

于 2012-08-27T13:46:43.910 回答