Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails/Spring Memberme为同一用户处理多个浏览器+;会话并发_Spring_Grails - Fatal编程技术网

Grails/Spring Memberme为同一用户处理多个浏览器+;会话并发

Grails/Spring Memberme为同一用户处理多个浏览器+;会话并发,spring,grails,Spring,Grails,使用基于Spring安全内核的grails安全插件的rememberme特性 我的config.groovy相关内容如下: // Added by the Spring Security Core plugin: grails.plugins.springsecurity.userLookup.userDomainClassName = 'org.blah.user.User' grails.plugins.springsecurity.userLookup.authorityJoinClass

使用基于Spring安全内核的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,即每个浏览器需要一次登录,然后记住继续。。。 这是默认行为吗?如果不是,如何实现


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

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

1) 编写自己的“记住我”身份验证过滤器,例如

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

3) 编写您自己的MemberMe服务,扩展TokenBasedMemberMeservices。您需要最少重写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")
    }

这个插件并不是开箱即用的。在较高级别上,您可能需要执行以下操作:

1) 编写自己的“记住我”身份验证过滤器,例如

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

3) 编写您自己的MemberMe服务,扩展TokenBasedMemberMeservices。您需要最少重写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")
    }

您需要的是每台计算机的身份验证,而不管使用的是什么浏览器,仅使用浏览器和一次登录都不可能安全地做到这一点。

您需要的是每台计算机的身份验证,而不管使用的是什么浏览器,仅使用浏览器和一次登录是不可能做到这一点的。

FYI,每个浏览器都有cookie。共享它们将是一个巨大的安全漏洞。仅供参考,每个浏览器都有cookie。共享它们将是一个巨大的安全漏洞。