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 会话集群在以下情况下应该起作用:

  1. 您在 web.xml 中启用了 <distributed/>
  2. 您应用的服务器组正在使用 hafull-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>