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

时间:2012-12-15 01:35:00

标签: spring apache tomcat spring-security jsessionid

我有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保持不变。

当我第一次访问动态页面时(当我通过spring-security登录时)创建了JSESSIONID。当我浏览任何动态页面(即通过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 个答案:

答案 0 :(得分:0)

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

  • 使用firebug查看当您从静态页面导航到动态页面时是否正在发送jsessionid。 firebug是否显示JSESSION id更改的值,你想要隔离问题所在的层,jsession id是否为apache但是没有通过tomcat?

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