如何在混合 Apache 和 Tomcat 环境中保持会话

Posted

技术标签:

【中文标题】如何在混合 Apache 和 Tomcat 环境中保持会话【英文标题】:how do I persist a session in a mixed Apache and Tomcat environment 【发布时间】:2012-12-03 00:48:32 【问题描述】:

我有 Apache 提供静态内容和 Tomcat 提供动态内容,由 mod_jk 链接。我的应用程序是基于 Spring 的,使用 Spring Security。 Apache 页面是端口 80,Tomcat 页面在端口 8080 上提供服务。我发现 Spring Security 正确调用了登录并创建了一个 JSESSIONID cookie。当我继续导航到动态页面时,这个 JSESSIONID cookie 仍然存在;也就是说,到 Tomcat 提供的页面。当我导航到静态页面时,JSESSIONID cookie 消失了。大概这意味着Tomcat会话已经结束。这意味着当我随后导航回动态页面时,Spring Security 要求我再次登录。 如何在这种混合的静态和动态环境中持久保存 Spring Security?当我导航回 Apache 提供的页面时,有什么方法可以让 JSESSIONID cookie 持久存在。

JSESSIONID 是在我第一次访问动态页面时创建的(当我通过 spring-security 进行登录时)。在我浏览任何动态页面(即,通过 Tomcat 提供的页面)时,JSESSIONID 保持存在且未更改。当我导航到静态页面时,JSESSIONID cookie 消失(这不是其值更改的问题 - 不存在 JSESSIONID cookie)。 工人属性是:

worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=50
worker.ajp13_worker.cachesize=10
worker.ajp13_worker.cache_timeout=600
worker.ajp13_worker.socket_keepalive=1
worker.ajp13_worker.socket_timeout=300

配置指令是:

JkMount /OLOSmember/ ajp13_worker
JkMount /OLOSmember/* ajp13_worker

浏览器是 Chrome。 Apache 和 Tomcat7 在 Ubuntu 上。

【问题讨论】:

【参考方案1】:

您的问题中没有足够的信息来给出明确的答案。您可以采取以下措施进行故障排除。

当您从静态页面导航到动态页面时,使用 firebug 查看是否正在发送 jsessionid。 firebug 是否显示 JSESSION id 的值发生变化,您想隔离问题所在的层,jsession id 是否使其进入 apache 但未通过 tomcat?

显示您的 mod_jk 配置指令和 tomcat 的 worker.properties 文件,这样我们可以更好地帮助您。

【讨论】:

JSESSIONID 是在我第一次访问动态页面时创建的(当我通过 spring-security 进行登录时)。在我浏览任何动态页面(即,通过 Tomcat 提供的页面)时,JSESSIONID 保持存在且未更改。当我导航到静态页面时,JSESSIONID cookie 消失(这不是其值更改的问题 - 不存在 JSESSIONID cookie)。工人属性是: 这是我的错误。事实上,代码正在运行。 JSESSIONID 被持久化并且安全工作正常。我被误导了,因为当您导航回静态内容时,Chrome Inspect 将 cookie 显示为“消失”。事实上,它并没有消失——Chrome 只是停止显示它,因为它没有与显示的静态页面相关联。如果您使用 mod_proxy 而不是 mod_jk,它也可以正常工作。

以上是关于如何在混合 Apache 和 Tomcat 环境中保持会话的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat H2C请求混合漏洞预警(CVE-2021-25122)

会话混合 - apache httpd 与 mod_jk、tomcat、spring security - 提供其他用户的数据

如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat webapp?

如何配置Tomcat服务器环境

tomcat如何配置环境变量

Tomcat如何配置环境变量