2015-04-23 64 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