jboss 集群会话复制不工作(多个 jsessionid cookie)
jboss cluster session replication not working (multiple jsessionid cookies)
我正在尝试对部署在 jboss 上的 Web 应用程序进行身份验证,该应用程序在具有 2 个节点的集群模式下工作。
身份验证成功后,我被重定向到管理页面,过滤器会检查我是否已登录。
在独立模式下它工作得很好,但是当我部署到使用集群模式的生产环境时,过滤器拒绝了我的请求,因为它无法访问我在身份验证时建立的会话参数。
使用开发者工具我看到设置了 3 个 JSESSIONID cookie:一个用于 /
,一个用于 /myapplication
路径,另一个名为 JSESSIONID-34234 也用于 /myapplication
路径(在开始该过程之前,我已经清除了所有这些。
浏览 jboss 文档虽然这似乎是我问题的根源,但我看不到任何解释。
如何在我的 JBoss 集群中进行身份验证(我正在使用 spring 基于安全 http 表单的身份验证)?
Web 会话集群在以下情况下应该起作用:
- 您在
web.xml
中启用了 <distributed/>
。
- 您应用的服务器组正在使用
ha
或 full-ha
配置文件
如果您希望您的集群应用程序性能更好,请考虑实施良好的负载平衡策略。对于大多数 web 应用程序,使用粘性会话进行负载平衡是可以的。
在一些网络应用程序中,在故障转移的情况下不要求重新验证就足够了,或者如果验证信息可用,会话很容易重建。在这种情况下,您甚至不需要网络会话集群。集群 SSO 就足够了,需要注意的是您必须使用容器级别的安全性进行身份验证(很可能由 spring-security 支持)。这样只会复制身份验证信息,因此您必须设计会话数据管理以适应会话突然变空的情况。
通过将以下内容添加到虚拟主机配置文件来启用粘性会话来解决:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/myapplication" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://jboss6-hc-001-8109>
BalancerMember ajp://jboss2.imatiasl.lan:8109 route=jboss2-hc-001-server-02
BalancerMember ajp://jboss3.imatiasl.lan:8109 route=jboss3-hc-001-server-02
ProxySet lbmethod=byrequests stickysession=ROUTEID
</Proxy>
我正在尝试对部署在 jboss 上的 Web 应用程序进行身份验证,该应用程序在具有 2 个节点的集群模式下工作。
身份验证成功后,我被重定向到管理页面,过滤器会检查我是否已登录。
在独立模式下它工作得很好,但是当我部署到使用集群模式的生产环境时,过滤器拒绝了我的请求,因为它无法访问我在身份验证时建立的会话参数。
使用开发者工具我看到设置了 3 个 JSESSIONID cookie:一个用于 /
,一个用于 /myapplication
路径,另一个名为 JSESSIONID-34234 也用于 /myapplication
路径(在开始该过程之前,我已经清除了所有这些。
浏览 jboss 文档虽然这似乎是我问题的根源,但我看不到任何解释。
如何在我的 JBoss 集群中进行身份验证(我正在使用 spring 基于安全 http 表单的身份验证)?
Web 会话集群在以下情况下应该起作用:
- 您在
web.xml
中启用了<distributed/>
。 - 您应用的服务器组正在使用
ha
或full-ha
配置文件
如果您希望您的集群应用程序性能更好,请考虑实施良好的负载平衡策略。对于大多数 web 应用程序,使用粘性会话进行负载平衡是可以的。
在一些网络应用程序中,在故障转移的情况下不要求重新验证就足够了,或者如果验证信息可用,会话很容易重建。在这种情况下,您甚至不需要网络会话集群。集群 SSO 就足够了,需要注意的是您必须使用容器级别的安全性进行身份验证(很可能由 spring-security 支持)。这样只会复制身份验证信息,因此您必须设计会话数据管理以适应会话突然变空的情况。
通过将以下内容添加到虚拟主机配置文件来启用粘性会话来解决:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/myapplication" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://jboss6-hc-001-8109>
BalancerMember ajp://jboss2.imatiasl.lan:8109 route=jboss2-hc-001-server-02
BalancerMember ajp://jboss3.imatiasl.lan:8109 route=jboss3-hc-001-server-02
ProxySet lbmethod=byrequests stickysession=ROUTEID
</Proxy>