jboss群集会话复制不起作用(多个jsessionid cookie)

时间:2016-04-27 06:43:23

标签: jboss session-variables session-cookies load-balancing session-replication

我尝试在我的网络应用程序上进行身份验证,该网络应用程序部署在以2个节点的群集模式工作的jboss上。

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

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

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

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

如何在JBoss群集中进行身份验证(我使用基于Spring安全性http表单的身份验证)?

2 个答案:

答案 0 :(得分:3)

通过将以下内容添加到virtualhost配置文件来启用粘性会话来解决此问题:

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>

答案 1 :(得分:2)

如果符合以下条件,Web会话群集应该有效:

  1. 您在<distributed/>启用了web.xml
  2. 您应用的服务器组正在使用hafull-ha个人资料
  3. 如果您希望群集应用程序执行得更好,请考虑实施良好的负载平衡策略。对于大多数webapps来说,使用粘性会话进行负载均衡是可以的。

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