принудительно выйти из сеанса - PullRequest
1 голос
/ 17 марта 2010

Я использую весна + гобелен для аутентификации веб-пользователя. Интересно, есть ли способ, которым я могу заставить всех пользователей, которые в настоящее время входят в систему, выйти из системы Допустим, я нахожусь в сценарии, когда сайт находится "в режиме обслуживания"

p / s: сможет ли он принудительно завершить работающий процесс всех пользователей и только принудительно выйти из системы

Ответы [ 2 ]

4 голосов
/ 17 марта 2010

На ум приходят две вещи:

  • используйте HttpSessionListener, чтобы отслеживать все сеансы и аннулировать их, когда придет время. Чтобы использовать это, вам понадобится Set из Session объектов в вашем ServletContext (или менее предпочтительно - в качестве статического поля). Обновляйте это Set всякий раз, когда сеанс создается или уничтожается, и повторяйте набор, когда требуется аннулирование.

  • используйте Filter (сопоставленный с /*), где, если определенные условия (maintenance == true) выполнены, делают недействительным текущий сеанс. Таким образом, все пользователи будут отключены при следующем действии. Это будет работать в тех случаях, когда «режим обслуживания» означает не «остановка всего сервера», а скорее «пользователи не должны выполнять никаких операций, я делаю что-то важное в фоновом режиме, которое не должно мешать»

1 голос
/ 17 марта 2010

Проблема состоит в том, чтобы позволить им завершить запрос и только затем выйти из системы. Я предполагаю, что если они нажимают «Сохранить» на форме, вы хотите, чтобы данные были сохранены, но затем они должны быть перенаправлены на страницу обслуживания. Для запросов GET вы можете просто выйти из системы, если установлен флаг обслуживания. POSTs немного сложнее, потому что вы хотите выполнить запрос, а затем выйти из него и перенаправить их на страницу обслуживания. Я бы попробовал фильтр запросов. Обработайте запрос как обычно, но затем сделайте недействительным сеанс и используйте response.sendRedirect, если установлен флаг обслуживания.

Другим вариантом может быть использование таймера JavaScript в макете - периодически заходите на страницу, чтобы узнать, должны ли они выйти из системы. Это, вероятно, не позволило бы им завершить текущий запрос.

...