2015-04-23 80 views
0

我有一个(1)Tomcat服务器应用程序。它是代理到第二(2)应用服务器调用(第三方),如:JSESSIONID问题当Tomcat服务器作为另一个Tomcat服务器的代理服务器

最终用户 - >我的(1)Tomcat服务器应用程序 - >第二(2)应用服务器

当最终用户使用我的(1)Tomcat服务器应用程序进行身份验证时,我的(1)Tomcat服务器应用程序将代表最终用户登录到第二个(2)App Server。

第二个(2)App Server然后生成一个JESSIONID。我需要该JESSIONID是与正在与我的(1)Tomcat服务器应用程序交互的最终用户关联的那个。

问题似乎是第二个应用服务器正在与My(1)Tomcat服务器保持单一会话,以便如果多个最终用户正在与My(1)Tomcat服务器进行交互,它们都会结束共享一个会话。

(我希望是有道理的)

什么是处理这种情况的正确方法?

非常感谢您的帮助!

+0

如果您从Tomcat 1 - > Tomcat 2使用HttpClient,并且您拥有全局连接,则可能是全局管理Cookie。您将希望将这些连接更改为每个用户而不是全局共享。 –

回答

0

如何从app1调用app2?使用http客户端库或类似的东西?

问题似乎是第二个App Server与My(1)Tomcat服务器正在维护一个会话,因此如果多个最终用户正在与My(1)Tomcat服务器交互,他们最终都会分享一个会话。

我可以看到2个选项

  1. 您可以在第一应用的会话存储第二应用程序的JSESSIONID。每次从第一个代理第二个应用程序时,请从第一个用户会话中查找第二个应用程序的JSESSIONID,并将其包含在您的请求中

  2. 当您第一次从app2收到JSESSIONID时,发送cookie返回给用户的回应。随后的每一次调用都会自动使JSESSIONID流入app1,并将其代理到app2。但要实现这一点,您必须将app1的会话cookie名称更改为其他名称。

+0

我用CloseableHttpClient httpclient.execute()调用app2。 – Randy

+0

此外,我没有在(1)我的应用程序中使用任何会话。 – Randy

+0

我以前曾尝试过类似于您的第一个建议,但是我的(1)Tomcat服务器应用程序坚持要发送一个我无法删除的存储的JESSIONID。如果我添加了从最终用户获得的JSESSIONID,然后将其添加到(2)App Server的请求中,但它不起作用,因为我的(1)Tomcat服务器应用程序发送的原始JSESSIONID已发送。 – Randy