0

如何使用 grails 中的 spring security core 插件测试用户是否登录?

我想知道我数据库中的每个用户是否在线,我不知道如何使用 spring 安全插件来做到这一点

4

1 回答 1

0

我采取的步骤是:

定义bean:

import org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy 
import org.springframework.security.web.session.ConcurrentSessionFilter 
import org.springframework.security.core.session.SessionRegistryImpl 
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy

beans = { 

        sessionRegistry(SessionRegistryImpl) 

        sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) { 
                maximumSessions = -1 
        } 

        concurrentSessionFilter(ConcurrentSessionFilter){ 
                sessionRegistry = sessionRegistry 
                expiredUrl = '/login/concurrentSession' 
        } 
} 

从 grails 安装模板 (grails install-templates)

向 web.xml 添加监听器:

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

在我的服务中注入 sessionRegistry:

def sessionRegistry

...

def getSessionInformations(User user){
        def userDetails =   userDetailsService.loadUserByUsername(user.username)
        def sessionInfo = sessionRegistry.getAllSessions(userDetails, true)
        return sessionInfo
    }

.

def isOnline(User user) {
if (getSessionInformations(user)){return true } else { return false }
}
于 2013-04-24T16:28:42.183 回答