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 callreq.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)
просто дерьмо?