7

我正在尝试对部署在具有 2 个节点的集群模式下工作的 jboss 上的 Web 应用程序进行身份验证。

成功验证后,我被重定向到管理页面,过滤器检查我是否登录。

在独立模式下它工作得很好,但是当我部署到使用集群模式的生产环境中时,过滤器拒绝了我的请求,因为它无法访问我在身份验证时建立的会话参数。

使用开发人员工具,我看到设置了 3 个 JSESSIONID cookie:一个用于/,一个用于/myapplication路径,另一个称为 JSESSIONID-34234 也用于/myapplication路径(在开始该过程之前我已经清除了所有它们)。

浏览 jboss 文档我看不到对此的解释,尽管这似乎是我问题的根源。

如何在我的 JBoss 集群中进行工作身份验证(我正在使用基于 Spring Security http 表单的身份验证)?

4

2 回答 2

3

通过将以下内容添加到虚拟主机配置文件来启用粘性会话来解决:

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>
于 2016-05-10T13:44:48.250 回答
2

在以下情况下,Web 会话集群应该可以工作:

  1. 您启用<distributed/>web.xml.
  2. 您应用的服务器组正在使用hafull-ha配置文件

如果您希望集群应用程序性能更好,请考虑实施良好的负载平衡策略。对于大多数带有粘性会话的 webapps 负载平衡是可以的。

在某些 web 应用程序中,在故障转移的情况下不要求重新身份验证就足够了,或者如果身份验证信息可用,会话很容易重建。在这种情况下,您甚至不需要 Web 会话集群。集群 SSO 就足够了,需要注意的是您必须使用容器级别的安全性进行身份验证(很可能由 spring-security 支持)。这种方式只复制身份验证信息,因此您必须设计会话数据管理以适应会话突然变空的情况。

于 2016-05-07T18:50:26.950 回答