Как элегантно получить любой http-сеанс по id или всем активным в данный момент http-сеансам в веб-приложении (Java 2 EE)?
В настоящее время у меня есть WebSessionListener
, и после создания сеанса я помещаю его в ConcurrentHashMap() (map.put(sessionId, sessionObj))
, все в порядке, я могу в любой момент получить HTTP-сеанс из этой карты по идентификатору сеанса, но он выглядит как объекты HttpSession
никогда не будет завершен ... Даже сеанс был признан недействительным, карта все еще ссылается на недействительный объект сеанса ... Также я прочитал эту статью , и похоже, что WeakHashMap
неприемлемо в моем случае ...
Другими словами, мне нужна возможность просмотреть в любой HttpSession даже получить все активные в данный момент HttpSession
и получить оттуда некоторые атрибуты ...
Пожалуйста, посоветуйте кому-нибудь:)
Обновление
Мне нужен доступ к объектам HttpSession по следующей причине:
Иногда пользователь выполняет некоторые действия / запросы, которые могут повлиять на работу другого параллельного пользователя, например, администратор должен отключить учетную запись пользователя, но этот пользователь в настоящее время работает с системой, в этом случае мне нужно показать сообщение администратору, например, «Пользователь XXX в настоящее время работает с системой», поэтому мне нужно проверить, существует ли и активен ли любой HttpSession, который содержит учетные данные пользователя XXX. Вот почему мне нужна такая возможность, чтобы получить любой http-сеанс или даже все сеансы.
Моя текущая реализация: SessionManager, который знает обо всех сеансах (ConcurrentMap), и HttpSessionListener, которые помещают / удаляют сеанс в SessionManager.
Меня беспокоили проблемы с памятью, которые могут возникнуть, и я хотел обсудить это с кем-то, но в настоящее время я ясно вижу, что все должно работать нормально, потому что все недействительные сеансы будут удалены из карты при вызове метода sessionDestroyed (). ..
Большое спасибо за ваши повторы, но теперь я понял, что проблема была только в воображении:)