13
Сен
2021

Закрыть сессию в spring security приложении

У меня есть Spring-boot-приложение с подключенной системой авторизации пользователей (spring-security). Есть обычные пользователи и пользователи-админы. Приложение хранит текущие сессии в БД:

spring.session.store-type=jdbc

Мне необходимо:

  1. Получить список текущих пользовательских сессий
  2. Досрочно прекратить сессии всех пользователей кроме определённого.

Дело в том, что все примеры в интернете описывают работу либо со своей сессией (установка доп. атрибутов) либо тот случай, когда сессии хранятся в памяти приложения (класс org.springframework.security.core.session.SessionRegistryImpl) а не в БД.

У меня же приложение может запускаться в кластере и сессии, повторюсь, хранятся в БД. Вариант с перехватом события создания сессии (интерфейс AuthenticationSuccessHandler) и хранением списка отдельно тоже мне не подходит, так как приложение может рестартовать с активными сессиями в БД.

Сейчас я решаю 2-й пункт "в лоб", вызываю native sql query:

UPDATE public.spring_session SET max_inactive_interval = 1 WHERE principal_name != 'admin' OR principal_name IS NULL

Но, быть может, есть какой-то более элегантный способ?

Источник: https://ru.stackoverflow.com/questions/1328161/%D0%97%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8C-%D1%81%D0%B5%D1%81%D1%81%D0%B8%D1%8E-%D0%B2-spring-security-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8

Тебе может это понравится...

Добавить комментарий