Как связать запрос с HttpSession в приложении Java EE на основе полезной нагрузки запроса? - PullRequest
1 голос
/ 08 февраля 2012

У меня есть приложение Java EE, которое получает запросы через http / s.Запросы не содержат файлов cookie или параметров запроса jsessionid.

В полезной нагрузке запроса я могу найти строку "sessionid", которая должна позволить мне связать этот запрос с HttpSession.Мне удалось реализовать механизм, который хранит карту сессий в памяти, но это (нелегко) масштабируемо в кластерной среде.

Стандартный механизм Java EE для привязки запросов к HttpSessions основан на куки или перезаписи URL, которые мне недоступны, так как я не контролирую третью сторону, которая отправляет запросы.Кроме того, объект HttpServletRequest не имеет метода setSession ().

Существует ли простой способ связать запросы с HttpSessions, не полагаясь на определенный сервер Java EE или какой-либо распределенный кеш?

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

Несколько утверждений:

  • Сторонний клиент не соответствует спецификации HTTP, и это не ваша проблема
  • Если вам нужен собственный механизм, вам следует реализовать всеэтогоТо есть не полагайтесь на HttpSession - создайте Map<String, Object> для каждого sessionId и поддерживайте его yourelf
  • . Любое другое решение потребует подключения вашего кода в контейнер (для tomcat thay это может быть Valve), но естьне является стандартным решением.
0 голосов
/ 08 февраля 2012

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

Но да, изменение механизма означает , что стороннее лицо должно ему соответствовать.

...