Обычно вы не можете сделать недействительными пользовательские сессии, сразу же изменив информацию об их учетной записи, не прибегая к API, специфичному для контейнера, поскольку единственный способ получить доступ к HttpSession
- через объект HttpServletRequest
.
Вместо этого вы можете кэшировать имя пользователя в хранилище в памяти и обращаться к нему либо в фильтре, либо в пользовательском AccessDecisionVoter
. Использование флага в пользовательской таблице на самом деле не очень хорошая идея, поскольку этот флаг носит временный характер (он не имеет значения после перезапуска сервера) и лучше избегать снижения производительности запроса к базе данных при каждом запросе.
В блоге есть статья об использовании пользовательских избирателей для такого рода вещей. Это устарело, но общий подход обоснован.
Другой подход заключается в использовании SessionRegistry
Spring Security, который является частью функции управления сеансами. Обычно это используется для ограничения количества сеансов, которые может иметь пользователь, но также может использоваться для перечисления аутентифицированных в настоящее время пользователей или для отметки их сеанса по истечении срока действия.
Может также быть идеей просто перезагрузить права пользователя, а не выходить из него полностью.