java – 在同一个glassfish实例中保持多个会话

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

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

一个例子可能是:模块A,B和C部署了10分钟的会话.用户使用A登录,然后可以导航到B和C,并在C上花费(让我们假设)20分钟.

这个想法是,虽然用户只使用C,但我们必须在A和B上保持他的会话(包括托管bean).

什么可以帮助我们实现这一目标?一个想法是在每个模块上创建一个servlet来触摸会话(从而使它保持活动状态),并从用户正在使用的模块向这些servlet发送异步(单向可能?)请求,但似乎有点矫枉过正每次用户执行某些操作时打开HTTP连接(通过TCP).也许民意调查可以在这里提供帮助,但我们希望避免这种沟通.

另一个想法是使用共享内存缓存和缓存侦听器来触摸其他会话,使用会话ID进行查找;这会有更好的表现吗?

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

感谢您的时间.

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

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

希望这可以帮助

点赞