将 Tomcat 7 会话 ID 和值设置为通过硬件负载平衡标识,以实现会话相关性



虽然从我的角度来看很容易用 IIS 完成,但我完全是 Tomcat 的菜鸟,不知道如何为 cookie 内容设置静态值。是的,我已经阅读了安全隐患,最终将通过SSL访问,所以我不担心。另外,我已经阅读了关于不更改值的 Servlet 3.0 规范,我接受这一点。

在IIS中,我只需设置一个名为Set-Cookie的HTTP标头,其任意设置为WebServerSID,值为1001。

然后在包含这组真实服务器的负载平衡器 VIP 中,在 VIP 级别设置值 WebServerSID,对于第一个 Web 服务器,cookie 值为 1001,其余计算机的 cookie 值为 1002(服务器 2(,服务器 3 为 1003。

这将通过 Cookie 实现会话亲和性,直到客户端关闭浏览器。

如何在Tomcat 7.0.22中做到这一点?

我看到Tomcat 6.x和7.x之间在cookie及其设置方式方面发生了大量配置更改。经过广泛的研究,我尝试了以下方法在过去的一周里。

在 web.xml:(这将在 Tomcat 7.x 下禁用 URL 重写( 默认会话元素下的<tracking-mode>COOKIE</tracking-mode>

在上下文中.xml:(默认情况下cookie是正确的,但我是明确的,因为我无法让它工作(

cookies=true
sessionCookiePath=/
sessionCookieName=WebServerSID
sessionCookieName=1001

我在上下文中有 2 个条目.xml用于 sessionCookieName,因为来自 Tomcat 6.x 的等效命令看起来像它们已合并为 1。请参阅 http://tomcat.apache.org/migration-7.html#Tomcat_7.0.x_configuration_file_differences

提取:

org.apache.catalina.SESSION_COOKIE_NAME系统属性:已删除。可以通过为全局上下文配置 sessionCookieName 属性来获得等效的效果.xml(在 CATALINA_BASE/conf/context.xml 中(。org.apache.catalina.SESSION_PARAMETER_NAME系统属性:已删除。可以通过为全局上下文配置 sessionCookieName 属性来获得等效的效果.xml(在 CATALINA_BASE/conf/context.xml 中(。

如果这不是正确的,那么我根本不理解所需的语法,我找不到任何地方可以简单地用黑白拼写出来。

Tomcat 6.x下,我会在配置中使用Java选项,例如:

-Dorg.apache.catalina.SESSION_COOKIE_NAME=WebServerSID
-Dorg.apache.catalina.SESSION_PARAMETER_NAME=1001

我正在使用的应用程序没有在其他地方设置任何这些值,因此它不是应用程序。

所有这些设置都在卡特琳娜基地的上下文/网络/服务器.xml文件中

一天结束时,我需要在 Set-Cookie 下的响应标头中看到的内容:(如使用 Fiddler 看到的那样(是:

WebServerSID=1001

JSESSIONID=as8sd9787ksjds9d8sdjks89s898

提前致谢

问候

纯粹使用配置可以做的最好的事情是设置引擎的 jvmRoute 属性,该属性会将常量值添加到会话 ID 的末尾。大多数负载均衡器都可以处理这个问题。它看起来像:

JSESSIONID=as8sd9787ksjds9d8sdjks89s898.route1

如果这还不够好,你需要WebServerSID=1001你必须编写一个ServletFilter并配置它以在每个响应上添加标头。

最新更新