2009-09-18 55 views
3

我有一個運行在WebSphere 7上的java web應用程序。應用程序使用表單身份驗證方法,部分應用程序使用ajax請求訪問某些受保護資源。但是,當用戶的會話過期時,我將獲取登錄頁面來代替應該由ajax請求刷新的內容。如何通過使用基於表單登錄的java web應用程序通過AJAX處理身份驗證

有沒有很好的方法來處理這個問題? WebSphere通過登錄頁面返回響應狀態200,所以我不能依賴它。

也許有一種方法可以告訴服務器在某些情況下應該使用基本身份驗證,但我不知道如何。

我也想過首先檢查會話是否通過向未受保護的資源的請求,新的第一,然後返回了一定的地位,但它看起來像一個代碼味道液...

回答

1

這就是我在類似的情況下處理它的方式。在我們的例子中,AJAX響應總是JSON。當登錄過期時,認證過濾器總是以HTML格式發送登錄表單。所以,我檢查內容類型這樣,

if ((this.getHeader('Content-type') || '').include('application/json')) 

如果不是JSON,我只是重定向到另一個受保護的頁面,這將引發全屏幕登錄,然後該頁面將用戶直接回AJAX頁面。

+0

在我的情況下,AJAX響應是一個html代碼片段。 – svachon 2009-09-18 15:46:17

+1

您可以搜索登錄頁面的簽名(如name =「password」)。您應該在JSON內部包裝HTML片段,以便您可以輕鬆地返回錯誤和多個數據。 – 2009-09-18 16:37:00

+0

按照您的建議最終將我的HTML片段封裝在JSON內部,並添加了對內容類型的檢查。非常感謝! – svachon 2009-09-22 14:55:16

0

您可以發回了一些獨特的響應或者某些錯誤代碼(確保在任何情況下不會得到此錯誤代碼作爲有效響應),當用戶會話不存在來自WebSphere的Ajax調用時。並且在Ajax調用方法中,在進程響應上,檢查其錯誤代碼是否正確。如果其錯誤代碼,將其重定向到登錄頁面或執行以前的任何其他情況將是有效數據。

+0

這需要首先通過向未受保護的資源發送請求來檢查狀態。 WebSphere正在攔截請求,因爲資源受到保護。 – svachon 2009-09-18 14:46:42

相關問題