2012-08-15 73 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

您正在尋找的是每臺計算機身份驗證,無論使用的是哪種瀏覽器,而這僅僅是不可能只能使用安全地使用瀏覽器並且只能一次登錄。

相關問題