закрытие http сессии из другого потока - PullRequest
2 голосов
/ 20 марта 2012

Я реализовал веб-приложение, используя Spring MVC. Веб-приложение интегрировано в систему с настольным пользовательским интерфейсом. Я хотел бы разрешить пользователям закрывать сессии веб-приложения из графического интерфейса destkop.

Я пытался реализовать не очень элегантное решение: вызывать аннулирование httpsession, но иногда оно прерывается, когда аннулируемый сеанс используется в текущем http-запросе. Он генерирует исключение IllegalStateException в DispatcherServlet, когда он пытается вызвать метод визуализации (в частности, в WebUtil.getSessionAttribute), поскольку он пытается получить доступ к атрибуту сеанса, а сеанс уже недействителен.

Итак, мой вопрос: есть ли способ вывести пользователя из его сеанса из потока, не являющегося http-запросом, не конфликтуя с выполнением http-запросов? Или, по крайней мере, конфликт, которым я могу управлять.

Спасибо

Jorge

1 Ответ

2 голосов
/ 14 мая 2012

Можно вручную свернуть механизм, включающий статический набор сеансов, срок действия которого вы хотите истечь, и фильтр сервлета, который проверяет этот набор на текущий сеанс, затем вызывает session.invalidate и перенаправляет пользователя чисто. Ваш десктопный API просто добавит сеанс к этому набору, и пользователь будет автоматически признан недействительным (в потоке HTTP-запросов) при следующем запросе.

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

...