我有以下要求
- 多个 JAR。每个都运行一个嵌入式 Jetty。
- 在同一个域/端口上运行每个人 - 使用反向代理 (Apache)
- 一个 JAR 可以在不同的机器上运行多个实例(但在相同的主机/端口下)。
- 完全会话分离 - 即使在同一个 webapp 的 2 个实例之间也绝对不共享。
- 动态扩展这一切。
- 我不知道这是否相关,但我知道其中一些 Web 应用程序使用了 Spring Security。
我通过添加反向代理规则并重新启动 Apache 使一切正常运行。这是 webapp-1 的 2 个实例和 webapp-2 的 2 个实例的简化描述。
http://mydomain.com/app1 ==> 1.1.1.1:9099
http://mydomain.com/app2 ==> 1.1.1.1:9100
http://mydomain.com/app3 ==> 1.1.1.2:9099
http://mydomain.com/app4 ==> 1.1.1.2:9100
在成功设置之后(几乎),我们看到了 JSESSIONID cookie 的问题。每个应用程序都会覆盖其他应用程序的 cookie——这意味着我们还没有实现完全的会话分离,因为一个会影响另一个。
我在网上阅读了很多关于这个问题的信息,但在我的场景中,这些解决方案永远不够用。
对我来说,理想的解决方案是定义 JETTY 以使用某种 UUID 作为 cookie 名称。我仍然无法弄清楚为什么这不是默认设置。
我什至会选择 JavaScript 解决方案。JavaScript 的优点是它可以在 ReverseProxy 操作后看到 URL。所以http://mydomain.com/XXX
我可以将 cookie 名称定义为XXX_JSESSIONID
.
但我找不到关于这些的方法。
那么我该如何解决这个问题并完全分离会话呢?