2017-01-10 57 views
0

我使用websphere jee表單身份驗證,並且想要在錯誤頁面中返回輸入的j_username。登錄失敗後無法讀取j_username

我用一個自定義過濾器來攔截對j_security_check的調用,並將j_username參數作爲屬性添加到請求中,但是當在錯誤頁面或控制器中檢查屬性時,我發現它始終爲空。在訪問j_security_check之前,在過濾器中找到了參數j_username,問題出在嘗試登錄失敗之後。

爲什麼websphere在重定向到錯誤url時不會傳遞j_username和j_password,以及如何在登錄錯誤頁面中訪問j_username?

+0

爲什麼?用戶知道他輸入的內容。你爲什麼需要告訴他他已經知道了什麼? – EJP

+0

首先,沒有回答這個問題。但是,如果你很好奇,有很多原因,包括你不能指望客戶避免輸入錯別字,並要求他記住他輸入的內容。或者你想檢查登錄失敗是否發生,因爲用戶名在你的數據庫中完全不存在,並且基於那個顯示適當的錯誤消息或重定向到註冊頁面。有很多原因,但我更感興趣的是答案而不是問題:) –

回答

0

解決方案很簡單。我發現當action爲/ j_security_check時,websphere 8.5會創建一個會話。因此,我使用了/ j_security_check的Web過濾器來將j_username參數存儲在該會話中,並且在發生登錄失敗時,我使用$ {sessionScope [STORED_USERNAME]}從該會話中檢索了用戶名。

希望幫忙

0

我的猜測是當登錄失敗發生時j_username被清空。您可能必須從過濾器中的請求中檢索登錄名,並使用request.getParameter(「j_username」)將它傳遞給錯誤頁面?

儘管我會從安全角度來說,對最終用戶來說,更少的信息會更好。我不會告訴最終用戶該用戶名存在,並且密碼不好,因爲如果有人試圖破解該帳戶,那麼你已經給了他們一個信息,他們不知道哪個是「用戶名有效」?我會顯示他們輸入的用戶名,但只是說「要麼用戶名不存在,要麼密碼是無效的」,並使其不明確。這樣,有效用戶就會知道他們是否錯誤地鍵入了他們的用戶名,但黑客並不知道他是否正確地輸入了用戶名。

+0

當服務器重定向到錯誤頁面時,j_username被忽略。我同意出於安全原因向用戶顯示較少的信息。但是,這個應用程序是供內部使用的,而不是公開的。但是,謝謝你的信息 –

+0

沒錯。所以你應該能夠在調用登錄之前使用request.getParameter()來獲取用戶名,然後讓它保存以傳遞到錯誤頁面。 –

相關問題