grails - 手动注销其他用户

标签 grails spring-security

在我的应用程序中,我需要以编程方式注销用户,而不是当前用户。我能够终止其 session ,但这不会强制该特定用户注销。所以我的问题是,如何强制注销用户的下一个请求?现在是我的代码:

sessionRegistry.getAllPrincipals().each {
   principal = it
   sessionRegistry.getAllSessions(it, false).each {
       if (principal.username == userSec.username) {
           it.expireNow()
       }
   }
}

我的资源中有这个。
sessionRegistry(SessionRegistryImpl)
    sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) {
        maximumSessions = -1
    }
    concurrentSessionFilter(ConcurrentSessionFilter){
        sessionRegistry = sessionRegistry
        expiredUrl = '/login/concurrentSession'
    }

最佳答案

使用 session 机制是不可能的。您必须使用可以保留用户的存储介质。该介质可以是RAM中的单例(如ConcurrentHashMap实例),也可以是DB,具体取决于您的集群体系结构。

然后在每次调用springSecurityService.currentUser时(例如在Spring Security核心插件中),您必须检查sessionRegistry是否包含该用户,如果不包含该用户,则使 session 或该用户无效

关于grails - 手动注销其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838437/

相关文章:

grails - Grails-Batik.jar互动

grails - 如何清除apache shiro session ?

grails - 具有Spring安全性的Grails项目中的不同登录 Controller

spring - ProviderManager.authenticate为BadCredentialsException调用了两次

java - Spring Security hasPermission for Collection<Object>

java - Jax-WS 和 Spring-security 冲突

file - Grails - 从 Quartz 作业和过滤器记录日志

database - 如何避免 'Could not determine Hibernate dialect for database name [H2]!' ?

java - Groovy 中的继承 - 基类表列出子类的条目

spring - spring-security.xml 错误 "Configuration problem: spring-security-web classes are not available. You need these to use <filter- chain-map>"