JSESSIONID коллизия между двумя серверами на одном и том же ip, но разных портах

У меня возникла ситуация, когда у меня на одном сервере запущены два разных веб-приложения, использующих разные порты. Они оба работают с контейнером сервлетов Java Jetty, поэтому они оба используют параметр cookie с именем JSESSIONID для отслеживания идентификатора сеанса. Эти два веб-приложения борются за идентификатор сессии.

Open a Firefox tab, and go to WebApp1 WebApp1's HTTP response has a set-cookie header with JSESSIONID=1 Firefox now has a Cookie header with JSESSIONID=1 in all it's HTTP requests to WebApp1 Open a second Firefox tab, and go to WebApp2 The HTTP reqeust to WebApp2 also has a Cookie header with JSESSIONID=1, but in the doGet, when I call req.getSession(false); I get null. And if I call req.getSession(true) I get a new Session object, but then the HTTP response from WebApp2 has a set-cookie header with JSESSIONID=20 Now, WebApp2 has a working Session, but WebApp1's session is gone. Going to WebApp1 will give me a new session, blowing away WebApp2's session. Continue forever

Таким образом, сеансы бьются между каждым веб-приложением. Я бы очень хотел заreq.getSession(false) возвращать действительный сеанс, если уже определен файл cookie JSESSIONID.

Один из вариантов заключается в том, чтобы в основном переопределить инфраструктуру Session с помощью HashMap и файлов cookie, называемых WEBAPP1SESSIONID и WEBAPP2SESSIONID, но это отстой, и означает, что мне придется взламывать новый материал Session в ActionServlet и некоторых других местах.

Это должно быть проблемой, с которой столкнулись другие. Is JettyHttpServletRequest.getSession(boolean) просто дерьмо?

Ответы на вопрос(5)

Ваш ответ на вопрос