[#] [Из песочницы] Совершенствуем контроль сессий в Spring Security
habrabot(difrex,1) — All
2018-01-10 11:00:05


Добрый день, уважаемое Сообщество.

Разрабатывая многопользовательское web-приложение, столкнулся с проблемой повторного логина пользователей, решение которой потребовало необычного обходного маневра, чтобы сохранить логичную работу программы и ее понятный дизайн. Хочу поделиться своим опытом. Это приложение — игра, где зарегистрировавшиеся пользователи могут выбирать с кем сразиться из списка присутствующих на сайте свободных игроков. После авторизации (log in) игрока на сайте информация о нем добавляется в структуру данных. Часть этой информации асинхронно отображается в игровом интерфейсе, как список игроков на арене. Когда игрок выходит, то информация о нем должна быть удалена из структуры данных, и он более не будет отображаться в списке соперников online. Здесь есть нюансы и сложности с учетом асинхронности, но преодолимые.

Учесть нужно было и то, что выход игрока с арены может произойти в результате различных ситуаций:

* он может добросовестно разлогиниться (нажав кнопку logout);
* может просто закрыть браузер, крышку ноутбука, нажать ресет и т.п., в общем уйти по-английски.



### Уходим по-аглийски



Для таких 'английских' сценариев используется следующий подход.

1.  Добавляется SessionEventListener при регистрации DispatcherServlet в ходе стандартной инициализации и настройки Spring MVC приложения:
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/346296/?utm_source=habrahabr&utm_medium=rss&utm_campaign=346296#habracut