2015-04-17 65 views
0

我正在對當前使用的項目進行接口升級,所以我想要的是一旦用戶登錄舊應用程序,就能夠在升級的項目上初始化會話。從java中的另一個webapp初始化會話

這個想法是,一些功能將被移植到另一種視圖技術,當用戶點擊一個移植的功能時,它會把他帶到新的應用程序,但現在我被困在新的應用程序上創建會話。

我試圖從舊應用安全過濾器類(它創建用戶會話和驗證一些參數的類)發送重定向,但我得到一個java.lang.IllegalStateException異常,說響應後無法調用sendRedirect()已經承諾

所以有一種方法來初始化新會話,一旦用戶登錄舊應用程序?

如果這是不可能的,你可以告訴我如何着手使兩個應用程序進行通信?基本上我想一旦用戶在舊的應用程序記錄到日誌他會自動新建一個

感謝

+1

您的代碼缺失,但是,您可以執行該操作。一切都取決於你如何管理你的用戶會話。如果您可以控制這兩個應用程序的請求,則可以在新應用程序中重新創建會話。只需從舊應用程序發送*登錄請求*即可。當捕獲到新的用戶會話時,創建一個具有所需參數的新用戶會話,之後,重定向將毫無問題地運行。 –

+0

在整個應用程序遷移之前,請求只會發送到舊應用程序。這個想法是爲用戶提供遷移結束後的新頁面,這就是爲什麼我想將它們重定向到新應用程序。 登錄請求應該作爲轉發或重定向發送?我從後端執行此操作,因爲在舊應用程序中有用戶登錄的類。我現在不在我的工作電腦上,但如果有幫助,我會在星期一發布代碼。感謝您的建議 – Viocartman

+0

發佈您的代碼將幫助您找到答案。如果您可以識別舊的應用程序請求**和**,則可以修改新應用程序中的代碼,這樣就不會有太大問題。 –

回答

0

直到整個應用程序遷移請求才會來在舊的應用程序。這個想法是爲用戶提供遷移結束後的新頁面,這就是爲什麼我想將它們重定向到新應用程序。登錄請求應該作爲轉發或重定向發送?我從後端執行此操作,因爲在舊應用程序中有用戶登錄的類。

我已經設計並實施了過去的類似要求,也許會有所幫助。

  1. 這兩個應用程序在同一個子域中,以便一個請求中的cookie(特別是會話cookie)流向另一個。

  2. 其中一臺服務器是對用戶進行身份驗證的「登錄」服務器。在你的情況下,它會是你的應用程序的舊版本。

  3. 我們沒有做後端重定向(雖然這是考慮的方法之一)。

  4. 當用戶會話由舊應用程序創建時,我們在由2個應用程序共享的架構中的db表中創建了一個條目。這個條目包含session-id,一個唯一的用戶ID,一個叫做'IS_ACCESSED'的標誌(我需要我將盡快解釋),另一個標誌'IS_VALID'(在註銷時設置爲false),輔助會話ID我將在下面解釋)和創建時間戳。

  5. 在新應用程序上開發的功能將具有指向新應用程序本身的鏈接。點擊這些鏈接將把用戶帶到新的應用程序。

  6. 當請求到達新的應用程序時,過濾器首先檢查該應用程序的有效會話。如果它找不到一個,它會檢查舊應用程序的會話cookie(記住所有的cookie都流向這兩個應用程序,它們都在同一個子域中)。如果它找到舊應用程序的cookie,它將檢索cookie值並訪問db表以查找舊應用程序是否已將具有該值的session-cookie放入。如果是,它將檢索關聯的用戶標識,創建自己的會話(在新應用程序中),將基本會話數據(用戶配置文件信息)加載到該會話,然後允許用戶訪問新應用中的請求頁面。因此該記錄包含一對會話ID

基本上會在第二應用重新的它還更新與自己的會話ID的記錄(列secondary_session_id)。在第一次讀取cookie值時,'IS_ACCESSED'值設置爲true以避免使用舊會話cookie的'重放'場景。

此外,一旦用戶註銷IS_VALID被標記爲false。您可以使用該標誌來檢查用戶是否已從主會話中註銷並使輔助用戶無效(對於單個註銷用例)

+0

嗨,感謝您的解決方案。我們最終使用了基本的httpRequest重定向,對我們來說它完成了這項工作。 – Viocartman

+0

np,只是好奇 - 你如何確保只有授權用戶才能訪問新的應用程序? – ramp

+0

我發送了一些被檢查的請求參數,基本上2個安全過濾器與SecurityFilter1中的相同,我發送重定向請求參數給新的應用程序,在SecurityFilter2中,我只是發送重定向到舊的應用程序。 – Viocartman

相關問題