3

用例:

我有两个在 tomcat 上运行的 Web 应用程序,它们部署在两台不同的机器上。我的一个申请是父母,另一个是孩子。我登录到我的父应用程序并点击父应用程序的一个页面上的链接我向我的子应用程序发送一个浏览器请求,该请求在单独的浏览器窗口中打开它的一个页面。在这种情况下,我希望我的两个应用程序共享相同的超时值,并且应该表现得像一个完整的应用程序。

处理场景:

  1. 如果我从我的父应用程序注销,我的子应用程序也应该注销
  2. 如果我关闭父窗口,父母应该和孩子一起注销
  3. 如果我关闭子窗口,孩子应该注销,父母应该保持登录状态
  4. 如果两个窗口都关闭,父母和孩子都应该注销

解决方案:

  1. 将父会话超时设置为某个值..say 30mins
  2. 在父级上创建一个 REST 服务。让我们说“parentisAlive()”
  3. 在 child..let 上创建一个 REST 服务,比如说“childisAlive()”
  4. 在父子节点上创建会话监听器
  5. 每个会话侦听器都会调用其各自的 REST 服务
  6. REST 服务将根据自己的应用程序的 sessionID 相互通信
  7. 父母会保留(内存/数据库)孩子的 sessionID,反之亦然
  8. 当每个超时值达到特定值时,各个应用程序会话侦听器将被激活..say 20mins
  9. 会话侦听器将调用相应的 REST 服务,该服务将负责同步彼此的会话超时值

任何人都可以建议这是否是实现会话同步的一个很好的解决方案,有人认为这有什么缺陷吗?

4

1 回答 1

0

Tomcats Single Sign on Valve 将满足您的大部分需求。但是,如果您关闭浏览器窗口,会话仍将保留,只要至少打开窗口或选项卡即可。

于 2012-05-03T18:03:34.860 回答