tomcat - 如何在反向代理后面正确设置 JSESSIONID cookie 路径

标签 tomcat reverse-proxy jsessionid

我的 Web 应用程序在 Tomcat 中运行在 http://localhost:8080/example.com/ 但它正在从服务于 http://example 的 Apache 反向代理.com/ 在端口 80 上。我的 Web 应用程序查看 request.getHeader("x-forwarded-host") header 以了解它位于反向代理之后。当它(动态地)检测到这一点时,它会构建没有 servlet 路径的 URL。

这对除 JSESSIONID cookie 之外的所有内容都适用。当通过反向代理访问时,它被设置为 /example.com 而不是 / 的路径。当请求中有 x-forwarded-host header 时,我不知道如何让我的代码告诉 Tomcat 覆盖该 cookie 的路径。

我已经尝试自己从网络应用程序设置 JSESSIONID cookie,但这只会导致两个 Set-Cookie header ,其中只有一个是正确的。

最佳答案

Tomcat6 使用 Servlet 2.3 规范。它不支持通过代码或 Tomcat 配置更改 cookie 路径。

我通过一些 mod_proxy 指令让它在 Apache 端工作。 ProxyPassReverseCookiePath 指令完全符合我的要求。它从 Tomcat 获取路径不正确的 cookie,并将其重写为正确的路径。

<VirtualHost *:*>
    Servername example.com
    ProxyRequests Off
    ProxyPass / http://localhost:8080/example.com/
    ProxyPassReverseCookiePath /example.com /
    ProxyPassReverseCookieDomain localhost example.com
</VirtualHost>

关于tomcat - 如何在反向代理后面正确设置 JSESSIONID cookie 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486498/

相关文章:

tomcat - HTTP 错误代码 505

ios - Restkit 和 SSL 证书错误

jsp - 如何在自定义错误页面(Tomcat)中获取消息?

nginx - 无法让 nginx 反向代理加载 Web 应用程序的 css/图像

elasticsearch - 如何通过 HAproxy 访问 Kibana 仪表板

java - 识别搜索爬虫

kubernetes - Kong 背后的 Keycloak 和奇怪的重定向

cookies - 使用 JRun/ColdFusion 强制使用 HttpOnly cookie

google-chrome - Chrome 和 Firefox 未清除 JSESSIONID cookie 会导致重定向循环

javascript - HTTP 请求中的 Angular2 Set-Cookie JSESSIONID