1

我有 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 上。

4

1 回答 1

0

您的问题中没有足够的信息来给出明确的答案。您可以执行以下操作来排除故障。

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

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

于 2012-12-15T04:53:09.927 回答