如何使用 grails 中的 spring security core 插件测试用户是否登录?
我想知道我数据库中的每个用户是否在线,我不知道如何使用 spring 安全插件来做到这一点
如何使用 grails 中的 spring security core 插件测试用户是否登录?
我想知道我数据库中的每个用户是否在线,我不知道如何使用 spring 安全插件来做到这一点
我采取的步骤是:
定义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 }
}