用例:
我有两个在 tomcat 上运行的 Web 应用程序,它们部署在两台不同的机器上。我的申请之一是 parent ,另一个是 child 。我登录到我的父应用程序并点击父应用程序页面之一上的链接我向我的子应用程序发送浏览器请求,该请求在单独的浏览器窗口中打开其页面之一。在这种情况下,我希望我的两个应用程序共享相同的超时值,并且应该表现得像一个完整的应用程序。
要处理的场景:
- 如果我从父应用程序注销,我的子应用程序也应该注销
- 如果我关闭父窗口, parent 应该和 child 一起注销
- 如果我关闭子窗口, child 应该注销并且 parent 应该保持登录状态
- 如果两个窗口都关闭了, parent 和 child 都应该注销
解决方案:
- 将父 session 超时设置为某个值..比如 30 分钟
- 在父级上创建一个 REST 服务..让我们说“parentisAlive()”
- 为 child 创建一个 REST 服务..让我们说“childisAlive()”
- 在父子上创建 session 监听器
- 每个 session 监听器都会调用各自的 REST 服务
- REST 服务会根据自己应用程序的 session ID 相互通信
- parent 会保留(内存/数据库) child 的 sessionID,反之亦然
- 当每个应用程序的超时值达到特定值时,相应的应用程序 session 监听器将被激活。比如 20 分钟
- session 监听器将调用各自的 REST 服务,该服务将负责同步彼此的 session 超时值
任何人都可以建议这是否是实现 session 同步的好解决方案,有人看到其中的任何缺陷吗?
最佳答案
Tomcat Single sign on阀门将满足您的大部分需求。但是,如果您关闭浏览器窗口,只要至少打开一个窗口或选项卡, session 仍将保留。
关于session - 在两个 Web 应用程序之间同步 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413624/