Добрый день, уважаемое Сообщество.
Разрабатывая многопользовательское 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