2012-09-14 43 views
4

现在,我们正在开发一个大的应用程序,其中模块部署为单.EAR文件(每个含.WAREJB .JAR) 。保活多个会话在同一个GlassFish实例

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

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

这个想法是,虽然用户只使用C,我们必须保持他的会话(包括托管的豆)在AB

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

另一个想法是使用共享内存缓存和缓存监听器来触摸其他会话,使用会话ID进行查找;这可以做到性能更好吗?

除了使用其他应用程序服务器(我们必须使用OpenSource GlassFish - 没有Coherence * Web)之外,我们愿意接受任何想法。

谢谢你的时间。

回答

2

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

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

希望这有助于

+0

虽然我们的客户最终选择来解决这个使用Oracle Coherence的,这是可以在很多场景中应用了一个有趣的答案,并且链接是非常有用的。谢谢! – joheva

相关问题