我有一个 Spring 2.5.6/Flex 应用程序设置并与 Spring Security 2.0.4 一起运行。最近部署了一个负载均衡器(A Foundry ServerIron 4g http://www.foundrynet.com/products/a...ems/si-4g.html),现在我遇到了跨域错误。基本上,负载均衡器正在向 myloadbalancer.abc.com 发出请求,并且 myrealserver1.abc.com 将作为域名返回。 Spring安全性以某种方式将请求转发到真实服务器。我该如何解决这个问题?
ConcurrentSessionFilter 也不再工作。该应用程序设置为禁用并发登录,但该功能在应用程序置于负载平衡器后面后停止。我相信也有多个 Oracle 应用服务器集群在一起。我以前从未处理过集群或负载均衡器,并且我不知道软件在某些领域必须以不同的方式编写。
对我来说,这些听起来像是不同的问题,但我需要针对这两个问题的帮助。
最佳答案
关于你的第二个问题:
如果 ConcurrentSessionFilter 停止工作(即不再阻止并发 session ),这可能是由于具有粘性 session 的集群应用程序容器造成的。
在这样的设置中,集群的每个节点都独立工作,不与其他节点共享状态。相反,负载均衡器确保现有 session 始终由同一节点提供服务。
现在 Spring Security 的 ConcurrentSessionController
通过将 session 映射到主体来工作。 Controller 本身依赖HttpSessionEventPublisher
发送ApplicationEvents
用户 session 的启动和终止。
如果有人打算打开多个 session ,但最终在他已经打开了一个 session 的同一节点上,一切都会正常进行。 HttpSessionEventPublisher
通知并发 session 机制 session 的创建,并且身份验证将失败,因为已经存在与该用户关联的 session 。然而,在另一个节点上,该用户还没有 session ,因此 ConcurrentSessionController
没有提示并且登录成功。
幸运的是,解决问题应该很容易:实现您自己的 SessionRegistry
并为所有节点使用共享数据存储(例如应用程序的数据库)。
关于spring - 负载均衡、Spring Security、ConcurrentSessionFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507480/