Как правильно установить путь cookie JSESSIONID за обратным прокси - PullRequest
24 голосов
/ 28 февраля 2012

Мое веб-приложение работает в Tomcat на http://localhost:8080/example.com/, но его обратный прокси-сервер от Apache, обслуживающего http://example.com/ на порту 80. Мое веб-приложение просматривает заголовок request.getHeader("x-forwarded-host"), чтобы понять, что оно находится заобратный прокси.Когда он обнаруживает это (динамически), он создает URL-адреса без указания пути к сервлету.

Это прекрасно работает для всего, кроме файла cookie JSESSIONID.Он устанавливается с путем /example.com вместо / при обращении через обратный прокси-сервер.Я не могу понять, как заставить мой код сообщать Tomcat о необходимости переопределить путь для этого cookie, когда в запросе есть заголовок x-forwarded-host.

Я пытался установить cookie JSESSIONID из Интернетаприложение, но в результате получается два заголовка Set-Cookie, только один из которых правильный.

Ответы [ 3 ]

33 голосов
/ 28 февраля 2012

Tomcat6 использует спецификацию Servlet 2.3. Он не поддерживает изменение пути к cookie через код или конфигурацию Tomcat.

Я заставил его работать со стороны Apache с некоторыми mod_proxy директивами. Директива ProxyPassReverseCookiePath делает именно то, что я хочу. Он берет cookie от Tomcat с неверным путем и переписывает его на правильный путь.

<VirtualHost *:*>
    Servername example.com
    ProxyRequests Off
    ProxyPass / http://localhost:8080/example.com/
    ProxyPassReverseCookiePath /example.com /
    ProxyPassReverseCookieDomain localhost example.com
</VirtualHost>
6 голосов
/ 24 сентября 2013

В качестве альтернативы установите для атрибута sessionCookiePath узла / Context (файл: /conf/context.xml) значение «/»:

<Context sessionCookiePath="/">

Посмотрите: http://tomcat.apache.org/tomcat-7.0-doc/config/context.html для получения дополнительной информации

5 голосов
/ 25 сентября 2013

Версия 3.0 спецификации Servlet представила функциональность для управления сессионным cookie: http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getSessionCookieConfig()

SessionCookieConfig scc = getServletContext().getSessionCookieConfig();
scc.setPath("/");
scc.setDomain("example.com");

Tomcat 7 использует версию 3 спецификации сервлета.

...