2009-06-22 100 views
1

我使用FORM身份驗證。如何檢查FORM領域驗證是否失敗?

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
     <form-login-page>/loginPage.jsp</form-login-page> 
     <form-error-page>/loginPage.jsp</form-error-page> 
    </form-login-config>     
</login-config> 

我想爲我的form-login-page和form-error-page使用相同的JSP,以便重用代碼。我使用Realm(org.apache.catalina.realm.JDBCRealm)。

在我的JSP中,如果身份驗證失敗,我想顯示錯誤消息。 Realm在請求中存儲了什麼,我可以檢查嗎?

回答

0

我這樣做是通過讓錯誤頁面通過http頭重定向到登錄頁面,並通過讓錯誤頁面包含javascript來打開錯誤下面的iframe中的登錄。

+0

謝謝,它看起來太複雜了。必須有一個最簡單的方法 – 2009-06-22 19:47:01

1

參數添加到URL的錯誤頁面:

<form-login-config> 
    <form-login-page>/login.jsp</form-login-page> 
    <form-error-page>/login.jsp?error=true</form-error-page> 
</form-login-config> 

在你的login.jsp,檢查是否發生錯誤,如果它沒有顯示錯誤消息:

<c:if test="${not empty error}"> 
    <p class="error">Login failed. Please try again.</p> 
</c:if> 

這表單不會讓您輸出登錄失敗的任何具體原因。但是,安全考慮已經使其成爲不正確的做法,所以這不應該成爲問題。例如。你不應該想要輸出詳細的消息,如「沒有用戶註冊該名稱」。或者「用戶X的密碼錯誤」,因爲這有助於攻擊者入侵系統。

只要告訴他們登錄失敗。簡單和良好的安全實踐,你想要什麼? :)

+0

是否有解決方法將參數傳遞到錯誤頁面(動態地,由實現login-config中描述的身份驗證的類提供)?我想向用戶展示他的用戶是否被阻止或者他/他的用戶名/密碼無效。 – 2015-02-20 11:31:20