2012-10-31 42 views
3

我有一個tomcat服務器,我已經部署了10個web應用程序。 我有一個Filter從一個應用程序(例如「A」)讀取傳入請求,讀取某個cookie值,並根據cookie的值從數據庫獲取另一個上下文名稱(稱爲「B」)。 該過濾器然後用上下文A(例如,http://1.1.1.1/A/XYZServlet)將請求重寫爲具有作爲B的上下文的新請求(例如,http://1.1.1.1/B/XYZServlet)。在tomcat中從一個上下文切換到另一個上下文時會話丟失

在執行此操作時,執行新請求時會丟失所有會話變量。 當我的過濾器將舊請求(上下文A)重定向到新請求(上下文B)時,如何確保會話和所有會話變量(與上下文A相關)都保留? 由於某些體系結構原因,在server.xml中設置emptySessionPath =「true」不能成爲解決方案。

+0

刪除瀏覽器cookies並重試。 –

回答

0

Tomcat會話被限定爲單個Web應用程序。就你而言,當你切換到不同的上下文時,會話數據不會丟失,但不適用於新的上下文。範圍由會話cookie的路徑控制,它將包含創建Web應用程序的上下文,因此只能發送到Tomcat以獲取該上下文中的請求。

如果要擴展會話範圍,可以考慮幾個選項:可以將會話cookie(默認爲JSESSIONID)修改爲根上下文路徑/。然而,會話cookie管理在Tomcat中非常深入,並且很難(如果不是不可能的話)修改。我曾嘗試將會話cookie更改爲具有固定有效期的持久性,但沒有找到辦法。

不那麼優雅,但可能的工作方式是複製會話cookie。我不確定它是否可以正常工作,但在過濾器中,您可以讀取會話cookie並以目標上下文作爲路徑創建副本。在隨後的請求中,僞裝的會話cookie將被包括在內,可能使您的以前的會話數據可用。

相關問題