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

Tomcat 如何在反向代理后正确设置JSESSIONID cookie路径,tomcat,reverse-proxy,jsessionid,Tomcat,Reverse Proxy,Jsessionid,我的web应用程序正在Tomcat中运行,http://localhost:8080/example.com/但它是从提供服务的Apache反向代理的http://example.com/在端口80上。我的web应用程序查看request.getHeader(“x-forwarded-host”)头,知道它在反向代理后面。当它检测到这一点时(动态地),它会构建URL,而不使用servlet路径 除了JSESSIONID cookie之外,这对任何东西都适用。当通过反向代理访问时,它被设置为路径/

我的web应用程序正在Tomcat中运行,
http://localhost:8080/example.com/
但它是从提供服务的Apache反向代理的
http://example.com/
在端口80上。我的web应用程序查看
request.getHeader(“x-forwarded-host”)
头,知道它在反向代理后面。当它检测到这一点时(动态地),它会构建URL,而不使用servlet路径

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


我自己也尝试过从web应用设置JSESSIONID cookie,但这只会产生两个Set cookie头,其中只有一个是正确的。

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>

Servername example.com
代理请求关闭
ProxyPass/http://localhost:8080/example.com/
ProxyPassReverseCookiePath/example.com/
ProxyPassReverseCokieDomain localhost example.com

或者将节点/Context(文件:/conf/Context.xml)的属性sessionokiepath设置为“/”:



查看:有关更多信息,请参见Servlet规范3.0版介绍的用于控制会话cookie的功能:

Tomcat7使用Servlet规范的版本3

<Context sessionCookiePath="/">
SessionCookieConfig scc = getServletContext().getSessionCookieConfig();
scc.setPath("/");
scc.setDomain("example.com");