У меня есть ситуация, когда у меня есть два разных webapps, работающих на одном сервере, используя разные порты. Они оба запускают контейнер сервлетов Java Jetty, поэтому оба они используют параметр cookie с именем JSESSIONID для отслеживания идентификатора сеанса. Эти два webapps сражаются за идентификатор сеанса.
- Откройте вкладку Firefox и перейдите в WebApp1
- HTTP-ответ WebApp1 имеет заголовок set-cookie с JSESSIONID = 1
- В Firefox теперь есть заголовок Cookie с JSESSIONID = 1 во всех его HTTP-запросах к WebApp1
- Откройте вторую вкладку Firefox и перейдите в WebApp2
- HTTP reqeust для WebApp2 также имеет заголовок Cookie с JSESSIONID = 1, но в doGet, когда я вызываю
req.getSession(false);
, я получаюnull
. И если я вызываюreq.getSession(true)
, я получаю новый объект Session, но тогда ответ HTTP от WebApp2 имеет заголовок set-cookie с JSESSIONID = 20 - Теперь у WebApp2 есть рабочий сеанс, но сеанс WebApp1 отсутствует. Переход к WebApp1 даст мне новый сеанс, сдувающий сеанс WebApp2.
- Продолжить навсегда
Итак, сеансы разбиваются между каждым веб-приложением. Мне бы очень хотелось, чтобы req.getSession(false)
вернул действительный сеанс, если уже определен файл cookie JSESSIONID.
Один из вариантов заключается в том, чтобы в принципе переопределить структуру сеанса с помощью HashMap и файлов cookie, называемых WEBAPP1SESSIONID и WEBAPP2SESSIONID, но это отстойно, и это означает, что мне придется взломать новый материал Session в ActionServlet и несколько других мест.
Это должна быть проблема, с которой столкнулись другие. Является ли Jetty HttpServletRequest.getSession(boolean)
просто crappy?