有什么方法可以在 tomcat 中的不同应用程序之间共享会话状态?

新手上路,请多包涵

我们希望将一个工作应用程序拆分为两个不同的 .war 文件,以便能够在不影响另一个应用程序的情况下更新一个应用程序。每个 webapp 都有不同的 UI、不同的用户和不同的部署计划。

最简单的路径似乎是共享同一个会话,所以如果应用程序 A 设置 session.setAttribute("foo", "bar") 应用程序 B 将能够看到它。

有没有办法在同一个 Tomcat 实例中为两个应用程序共享 HttpSession 状态?

我们的应用程序在专用的 Tomcat 5.5 上运行,没有其他应用程序在同一个 tomcat 实例上运行,因此与会话共享有关的任何安全问题都不是问题。我们正在运行多个 Tomcat 实例,但平衡器使用的是粘性会话。

如果不可能或此 会话共享 是一个非常糟糕的主意,请发表评论。

原文由 Serxipc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 329
2 个回答

你不应该共享 HttpSession;但您可以共享其他对象。例如,您可以 通过 JNDI 注册一个对象 并在您的所有应用程序中访问同一个对象(数据库使用它来池化连接)。

原文由 Aaron Digulla 发布,翻译遵循 CC BY-SA 2.5 许可协议

需要注意的一件事是两个 Web 应用程序将使用不同的类加载器。如果你想共享对象,他们需要使用来自同一个类加载器的相同版本的类(否则你会得到 LinkageErrors)。这意味着要么将它们放在两个 Web 应用程序共享的类加载器中(例如系统类路径),要么使用序列化有效地耗尽并使用正确版本的类在正确的类加载器中重建对象。

原文由 Alex Miller 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题