2011-11-03 93 views
3

我有兩個應用程序在Tomcat JSF 2 Mojarra 2上運行。兩個應用程序都映射到同一個域,但每個應用程序都在該域內以不同的模式運行。一個應用程序用作首頁,另一個用於訪問受保護的資源(不要問爲什麼不是所有的應用程序,故意將應用程序分成兩個不同的實體,每個實體都負責它自己的事情)。現在的問題是:是否有可能,如果是,如何在這兩個單獨的應用程序之間傳遞會話狀態。爲了說明這裏有一些常見的情況:在兩個不同的應用程序之間傳遞會話數據

  1. 用戶並運行該網站的主要應用的東西,然後登錄並不管他/她最多做的是在被帶往新的會話登錄後到新應用程序。

  2. (我認爲這個稍微複雜一點)用戶在第一個應用程序中註冊,並在成功註冊到其他應用程序後自動登錄。哪裏喲必須登錄使用j_security_check表單登錄該應用程序(這將是最困難的部分)

回答

3

幾種方法:

  1. 存放在DB其中的數據和長識別它,唯一的,難以猜測的自動生成的密鑰,然後您又將其存儲在域範圍的cookie中。這樣,這兩個應用程序都可以根據cookie中找到的關鍵字從數據庫中獲取數據。

  2. 將這兩個應用程序的ServletContext公開給對方。在Tomcat中,將crossContext="true"添加到網絡應用程序的context.xml<Context>元素中。通過這種方式,你可以通過ServletContext#getContext().得到對方的ServletContext最後在那裏放入一些Map<String, SomeData>,這裏有兩個應用程序共享的ID,例如登錄的用戶ID(你只應該確保同一個用戶可以'不止有一個會話)。

+0

謝謝,非常有幫助。選項2在這裏看起來很理想,正是我所期待的。我已經考慮過選項1,但是決定不採用這種方式,並不認爲這是一個不錯的主意,可以使用這些長度並保存可能沒用的數據(例如,用戶永遠不會超越登錄點),然後另外管理這一切的維護。仍然不知道如何處理登錄j_security問題。你說我應該確保同一個用戶沒有超過一個session ..新的登錄時創建。兩個應用程序都不會存儲兩個不同的會話嗎? – foofighter

相關問題