我尝试在我的网络应用程序上进行身份验证,该网络应用程序部署在以2个节点的群集模式工作的jboss上。
成功验证后,我会被重定向到管理页面,过滤器会检查我是否已登录。
在独立模式下,它工作得很好但是当我部署到使用群集模式的生产中时,过滤器会拒绝我的请求,因为它无法访问我在身份验证时建立的会话参数。
使用开发人员工具,我看到有3个JSESSIONID cookie设置:一个用于/
,一个用于/myapplication
路径,另一个用于/myapplication
路径也称为JSESSIONID-34234(I&# 39;在开始这个过程之前已经清除了所有这些。)
浏览jboss文档但我看不到对此的解释,尽管它似乎是我问题的根源。
如何在JBoss群集中进行身份验证(我使用基于Spring安全性http表单的身份验证)?
答案 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会话群集应该有效:
<distributed/>
启用了web.xml
。ha
或full-ha
个人资料如果您希望群集应用程序执行得更好,请考虑实施良好的负载平衡策略。对于大多数webapps来说,使用粘性会话进行负载均衡是可以的。
在某些webapps中,在故障转移的情况下不要求重新验证就足够了,或者如果验证信息可用,会话很容易重建。在这种情况下,您甚至不需要Web会话群集。集群SSO就足够了,需要注意的是你必须使用容器级安全性进行身份验证(最有可能是spring-security支持)。这样只会复制身份验证信息,因此当会话突然变空时,您必须设计会话数据管理以适应情况。