4

现在我们正在开发一个大型应用程序,其中模块被部署为单个.EAR文件(每个文件都包含一个.WAR和一个EJB .JAR)。

我们在 GlassFish 3.1 中将应用程序配置为使用 JAAS 进行单点登录。因此,我们需要在 SSO 会话处于活动状态时保持每个 Web 模块会话处于活动状态。

一个示例可能是: Modules ABC使用 10 分钟的会话进行部署。用户使用 登录A,然后可以导航到BC,并在 上花费(假设)20 分钟C

这个想法是,当用户只使用时,我们必须在和C上保持他的会话(包括托管 bean)处于活动状态。AB

什么可以帮助我们实现这一目标?一个想法是在每个模块上创建一个 servlet 来接触会话(从而使其保持活动状态),并从用户正在使用的模块向这些 servlet 发送异步(可能是单向的?)请求,但这似乎有点矫枉过正每次用户做某事时打开 HTTP 连接(通过 TCP)。也许投票在这里会有所帮助,但我们想避免这种交流。

另一个想法是使用共享内存缓存和缓存侦听器来访问其他会话,使用会话 ID 进行查找;这可以用更好的性能来解决问题吗?

我们对任何想法持开放态度……除了使用其他应用程序服务器(我们必须使用 OpenSource GlassFish - 没有 Coherence*Web)。

感谢您的时间。

4

1 回答 1

2

您需要 JAAS 吗?您可以使用 spring-security 实现解决方案,并为会话 id 提供支持 redis 缓存。因此,例如,当用户登录时A,会将会话 ID 放入 redis 缓存中,当用户B通过将会话 ID 作为查询参数传递的链接导航到时,弹簧安全层 (on B) 将确保session-id 在 redis 缓存中是活动的并且有效。Redis 内置了对过期数据的支持

这是一篇很好的文章: http: //www.infoq.com/minibooks/Identity-Management-Shoestring关于构建中央身份验证服务 (CAS)。

希望这可以帮助

于 2012-10-11T10:37:53.497 回答