2011-05-28 51 views
0

我想在每個頁面上(在頁面的頁眉中)使用身份驗證表單,因此用戶可以從任何頁面進行身份驗證。 我使用Tomcat的基於表單的認證,但是當我去我的索引頁,並嘗試使用該表格在頭登陸,我得到:基於Tomcat FORM的身份驗證,在每個頁面上

HTTP 400 - Invalid Direct Reference To Login Page 

有任何解決方法,我可以使用,一些設置在web.xml也許,解決這個問題?

編輯: 這裏是頭部的登錄表單:

<form method="post" action="j_security_check"> 
    <input type="text" name="j_username" class="login"/> 
    <input type="password" name="j_password" class="login"/> 
    <input type="submit" value="Login"/> 
</form> 
+0

你可以展示你如何在頁眉(JSP代碼)中顯示錶單? – craftsman 2011-05-28 17:02:49

+0

@craftsman我用登錄表單編輯了問題。 – Igor 2011-05-28 17:25:54

+0

如果您碰巧使用Tomcat 7(使用Java 6和Servlet 3.0),那麼現在您可以選擇使用程序化登錄來實現您實質上嘗試執行的操作(請參閱http://download.oracle.com/javaee/6 /tutorial/doc/gjiie.html)。 – Codo 2011-08-05 19:09:43

回答

0

Tomcat基於表單的身份驗證的概念是,它將未經身份驗證的請求攔截到受保護的頁面,並在內部重定向到單獨的登錄頁面。它還保存了原始頁面請求。用戶成功登錄後,將重播原始頁面請求並顯示受保護的頁面。

你試圖實現的是 - 就我可以從你的簡短描述中得出 - 有不同的東西。基本上,你的所有網頁都是公開的。或者,用戶可以登錄並獲取個性化頁面。

Tomcat不會幫你實現這一點。當您使用j_security_check操作時,它將無法執行任何操作,因爲它首先從未攔截請求。

相反,如果提交登錄表單,自己檢查用戶名和密碼可能會更容易。如果他們沒問題,只需將用戶名輸入會話數據即可。認證會話可以很容易地被識別,因爲它包含會話數據中的用戶名。

甚至有可能重用例如Tomcat 領域的方式。能夠根據數據庫檢查用戶名和密碼。但我不確定。

+0

Thanx獲取有用的信息!正如您所提到的,似乎無法使用** j_security_check **來登錄每個頁面。也許使用過濾器可能會有幫助,但現在我堅持使用BASIC身份驗證,目前它爲我提供了足夠的支持。 – Igor 2011-06-02 13:28:27

0

你說你的登錄屏幕爲 「歡迎」?如果登錄成功,它會嘗試通過登錄頁面重新循環。什麼是歡迎頁面標籤在您的web.xml

+0

嗨,亞歷克斯!我沒有在我的應用中設置** welcome-file **,所以使用默認值。但是,我使用直接網址訪問我的應用程序,例如http:// localhost:8080/my-app/home.jsp ...在我的主頁(和其他每個頁面)上,我有一個登錄表單。 – Igor 2011-05-28 16:10:38