2015-01-08 2 views
0

В моем приложении мне нужно программно выйти из системы, а не из текущего. Я смог завершить свою сессию, но это не приводит к выходу из строя для этого конкретного пользователя. Поэтому мой вопрос: как я могу принудительно выйти из следующего запроса пользователя? Это мой код прямо сейчас:Вручную выйти из другого пользователя в grails

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

У меня есть это в моем resources.groovy:

sessionRegistry(SessionRegistryImpl) 
    sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) { 
     maximumSessions = -1 
    } 
    concurrentSessionFilter(ConcurrentSessionFilter){ 
     sessionRegistry = sessionRegistry 
     expiredUrl = '/login/concurrentSession' 
    } 

ответ

1

Использование сеанса mechanismus это не представляется возможным. Вы должны использовать носитель данных, где вы можете сохранить пользователей. Этот носитель может быть либо одиночным ОЗУ, например ConcurrentHashMap, либо DB, в зависимости от вашей архитектуры кластеризации.

Тогда при каждом вызове springSecurityService.currentUser (например, в основной плагин Spring Security), вы должны проверить, если sessionRegistry содержит, что пользователь, и если нет, то сессию недействительной или пользователь

Смежные вопросы