spring - 负载均衡、Spring Security、ConcurrentSessionFilter

标签 spring networking

我有一个 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/

相关文章:

docker - 无法连接到 Docker 容器中的 Go Server

java - 使用Java实现网络时间同步

sockets - 关闭/关闭对 TCP 接收缓冲区的影响

networking - 为什么在chord p2p系统中,finger表不存储其他节点的所有信息?

java - 从另一个类的静态方法初始化 Spring bean?

java - 错误: validation failed for objects with date

java - 无法在 Spring 中处理未映射的 urls/404 错误

javascript - 使用 html+css+javascript 或 JSP 作为我的表示层

java - LocaleChangeInterceptor 中 Autowiring 身份验证以将 lang 存储在数据库中不起作用

c - 套接字: "fd"和 "select"操作的任何库或包装器?