2017-02-07 9 views
2

Я использую Spring Session 1.3.0 с бэкэндом Redis в моем проекте.Как удалить существующие сеансы по определенному имени участника

У меня есть случай, когда супер администратор может обновлять роли существующего пользователя, который уже выполнил вход. Я хочу удалить существующие записи сеанса для этих пользователей после изменения их ролей.

Есть ли API Spring Session для его архивации?

ответ

0

Также работают еще один способ очистки сеансов конкретного пользователя,

@Autowired 
FindByIndexNameSessionRepository sessionRepository; 

sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, 
       username).keySet().forEach(session -> sessionRepository.delete((String) session)); 
+0

Удаление сессии преждевременно имеет некоторые побочные эффекты, если вы позволите несколько сеансов одного пользователя. Посмотрите на этот вопрос. http://stackoverflow.com/questions/22370819/how-to-log-a-user-out-programmatically-using-spring-security – mirmdasif

+0

@mirmdasif Это интересный вывод. Мне интересно, почему весна/весна безопасности по-прежнему дает разрешение на запрос с недопустимым идентификатором сеанса (истек или удален). – Kane

2
@Autowired 
    private SessionRegistry sessionRegistry; 

    public void expireUserSessions(String username) { 
     for (Object principal : sessionRegistry.getAllPrincipals()) { 
      if (principal instanceof User) { 
       UserDetails userDetails = (UserDetails) principal; 
       if (userDetails.getUsername().equals(username)) { 
        for (SessionInformation information : sessionRegistry.getAllSessions(userDetails, true)) { 
         information.expireNow(); 
        } 
       } 
      } 
     } 
    }