如何使用grails中的spring security core插件测试用户是否登录?
如果用户在线或没有,我想知道我的数据库中的每个用户, 我无法弄清楚如何使用spring security插件
执行此操作答案 0 :(得分: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 }
}