跨两个应用服务器管理会话

Posted

技术标签:

【中文标题】跨两个应用服务器管理会话【英文标题】:Manage session across two app servers 【发布时间】:2014-04-04 22:37:12 【问题描述】:

我有一个在 Spring 1.0 上运行的遗留应用程序,在 JBoss 4 上具有 Acegi 安全性。我们的计划是将应用程序的一个子集迁移到 Tomacat 7 和 Spring 4。用户将登录到遗留应用程序,但如果他们愿意导航到正在迁移的子集,它们将被重定向到新应用程序。

我的问题是如何维护两者之间的会话信息,以便用户可以在两个应用程序之间无缝导航并维护 SSO。两台服务器之间不会交换其他信息。我们面临的一个限制是我们必须对现有的遗留应用程序进行最小的更改。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

据我所知,您无法无缝地维护会话信息。

通过将 JBoss 和 Tomcat 配置为集群 using Tomcat's clustering(并假设 JBoss 随附的 Tomcat 版本与您正在运行的独立 Tomcat 兼容),然后在两者上配置 enabling SSO,您可能会非常幸运JBoss 和 Tomcat,但是您必须非常小心,不要在 JBoss 会话中放置独立 Tomcat 实例无法加载的任何内容。

您可能最好实施一些其他解决方案,例如使用 SAML 可能不太脆弱。

您说您不想进行太多更改,但如果您愿意亲自动手,您可以在 Web 应用程序之间使用共享的 URL 空间,使用不同的会话 id cookie,然后跨通过调用“其他”服务器以获取他们的身份验证信息(您必须以某种方式在会话中提供这些信息)来检查未经身份验证用户的传入请求。我建议不要在用户的会话中存储密码。而是允许一个应用程序使用第一个会话 cookie 在另一个应用程序中获取用户的用户名。相信用户名是准确的,并且用户已经在第一个应用程序中得到了正确的身份验证,然后在第二个应用程序中执行自动登录。

无论你做什么,都会变得一团糟,因为你的要求相当混乱。

【讨论】:

以上是关于跨两个应用服务器管理会话的主要内容,如果未能解决你的问题,请参考以下文章

跨页面存储会话数据最佳实践

如何在客户端单页应用程序中管理服务器用户会话

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

Express 中跨子域的会话

gwt 应用程序客户端的会话管理

iPhone应用程序的安全登录和会话管理