如何在同一主机上的多个Jetty上处理会话&;端口-动态上下文

如何在同一主机上的多个Jetty上处理会话&;端口-动态上下文,jetty,reverse-proxy,jsessionid,Jetty,Reverse Proxy,Jsessionid,我有以下要求 多个罐子。每个都运行一个嵌入式码头 在同一域/端口上运行所有人-使用反向代理(Apache) 一个JAR可以有多个实例在不同的机器上运行(但在相同的主机/端口下) 完全会话分离-即使在同一webapp的两个实例之间也绝对没有共享 动态缩放所有这些 我不知道这是否相关,但我知道这些web应用程序中使用了Spring Security 通过添加反向代理规则并重新启动Apache,我启动并运行了所有程序。 下面是webapp-1的2个实例和webapp-2的2个实例的简化说明 http:

我有以下要求

  • 多个罐子。每个都运行一个嵌入式码头
  • 在同一域/端口上运行所有人-使用反向代理(Apache)
  • 一个JAR可以有多个实例在不同的机器上运行(但在相同的主机/端口下)
  • 完全会话分离-即使在同一webapp的两个实例之间也绝对没有共享
  • 动态缩放所有这些
  • 我不知道这是否相关,但我知道这些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\u JSESSIONID

    但是我找不到关于这些的方法


    那么,我如何解决这个问题并获得会话的完全分离呢

    您必须花一些时间了解您正在使用的会话管理器以及它给您带来的功能/好处。如果您没有可用的db,并且没有自定义会话管理器,那么我倾向于相信您使用的是我们分发的HashSessionManager,它仅可用于单个主机上的会话管理,在本例中,JVM之间没有会话共享

    如果您正在运行4个独立的jvm进程(并使用HashSessionManager),如上所述,则没有跨节点共享会话

    此外,您似乎正在为每个应用程序更改会话id变量的名称。为此,只需为每个应用程序设置不同的名称


    您可以为每个webapp上下文设置一个新的org.eclipse.jetty.servlet.SessionCookie名称,该名称应能解决您当前的问题。

    您在会话管理中使用了什么?Jetty的JDBC会话,默认的散列会话管理器,mongo…一个自定义的会话?据我所知是默认的。我可以在浏览器中看到JSESSIONID cookies。我根本没有可用的数据库。我还没有编写自定义会话管理器。您好。我可能正在使用HashSessionManager。但正如我在问题中所指出,改变背景并不合适。我需要更有活力的东西。我是否可以传递一个JVM参数来执行相同的操作?会话不共享-更糟糕的是,它们被覆盖。当我访问app2时,我会从app1注销。我假设适当的生产项目定义了不同的cookie名称。这对spring安全性有何影响?是否有硬编码名称为“JSSessionID”的模块?