Возможно ли аннулировать сеанс безопасности весны?

Я использую Tomcat 6.0.32, Spring Security 3.0.5

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

    Обычно вы не можете аннулировать сеанс (ы) пользователя сразу же после изменения своей учетной записи, не прибегая к конкретному API-интерфейсу, поскольку единственный способ получить доступ к HttpSession – через объект HttpServletRequest .

    Вместо этого вы можете кэшировать имя пользователя в хранилище в памяти и проконсультироваться с ним либо в фильтре, либо в специальном AccessDecisionVoter . Использование флага в пользовательской таблице на самом деле не является отличной идеей, так как флаг носит кратковременный характер (он не имеет значения после перезапуска сервера), и лучше избегать попадания в производительность запроса базы данных по каждому запросу.

    Есть статья в блоге об использовании пользовательских избирателей для такого рода вещей. Он устарел, но общий подход звучит.

    Другой подход заключается в использовании SessionRegistry Spring Security, который является частью функциональности управления сеансом. Обычно это используется для ограничения количества сеансов, которые может быть у пользователя, но также может использоваться для enums пользователей, прошедших проверку подлинности, или для их окончания.

    Также может возникнуть идея просто перезагрузить пользовательские привилегии, а не полностью вывести их из системы.

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

    http://static.springsource.org/spring-security/site/docs/3.1.x/reference/session-mgmt.html#list-authenticated-principals

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

    1. Добавьте поле метки времени в свою пользовательскую таблицу (или ее эквивалент), которая обновляется при изменении пользовательского prvis.

    2. Напишите фильтр сервлета, который проверяет подлинность текущего сеанса И отметка времени для пользователя в БД больше времени создания сеанса. Если это так недействительно и перенаправляет сеанс.

    Этот фильтр должен появиться после фильтра Spring Security.

    Если вы не используете приложение на нескольких серверах, вы можете использовать SessionRegistry.

    Объект HTTPSession имеет метод invalidate. Когда пользователь изменяет некоторые разрешения, вам нужно будет вызвать этот метод для отмены и перезагрузки для текущего сеанса.

    Interesting Posts

    Все параметры загрузки – это примерный цикл

    Как запустить автономный сеанс браузера?

    Могу ли я настроить KiTTY для отправки нажатия F7 вместо того, чтобы поднимать диалог печати при нажатии кнопки F7?

    Ошибка Razor intellisense: функция «метод расширения» не может использоваться, поскольку она не является частью спецификации языка ISO-2 C #

    c # Класс SmtpClient, не способный отправлять электронную почту с помощью gmail

    C ++, получение миллисекундного времени на Linux – clock (), похоже, не работает должным образом

    Google Analytics Google Analytics Ошибка 403: «У пользователя нет учетной записи Google Analytics»

    Что такое параметр e (событие) и зачем передавать его функции JavaScript?

    Как вы можете получить неудачный вход в Windows 10

    Модифицированный фон загрузочной ленты Twitter не исчезает

    Excel: невероятное сокращение и расширение элементов управления

    Как решить ошибку приложения lsass.exe, показанную при загрузке Windows XP?

    Остановить программы от автоматического запуска при загрузке в Windows

    Преобразовать учетную запись Gmail из POP в IMAP и сохранить структуру папок?

    Создание симметричной матрицы в R

    Давайте будем гением компьютера.