2011-01-21 20 views
2

我正在嘗試使用Tomcat實現基於表單的身份驗證。我所有的安全servlet都映射到mydomain/myapp下。我可以通過遵循基本教程並指定登錄和login_failed頁面來保護此目錄。使用Tomcat進行表單身份驗證

我的問題是,我想一個包含用戶名/密碼的形式,使訪問者可以從那裏登錄不安全MYDOMAIN/index.html的。我迄今爲止的最佳嘗試不起作用:

<form method="POST" action="myapp/"> 
    Username: <input type="text" name="j_username"> <br/> 
    Password: <input type="password" name="j_password"> 
    <input type="submit" value="Login"> 
</form> 

有什麼建議嗎?

編輯:認證在這個意義上的作品,如果您嘗試訪問MYDOMAIN/MYAPP您重定向到登錄頁面。我不明白的是如何讓用戶登錄而無需首先嚐試訪問受保護的頁面。

+0

當你說它不起作用時,這意味着什麼? – Raghuram 2011-01-21 06:07:01

回答

1

讀段servlet specicification的13.5.3.1。它說: 「爲了驗證適當地進行,登錄表單 的動作必須始終j_security_check」。

所以,你必須改變你的登錄表單的動作。它必須是j_security_check。

+0

當用戶試圖訪問mydomain/myapp時,他們被重定向到登錄頁面,並使用j_security_check表單,並且一切正常。但是,如何將登錄表單放在mydomain/index.html上,以便它們可以通過身份驗證並重定向到安全部分? – user583933 2011-01-21 17:32:28

0

當用戶嘗試訪問您的受保護資源(securedPage.jsp)時,它們將被帶到您的登錄頁面(例如login.jsp)。他們將輸入用戶名和密碼,然後點擊'提交'。該表單將使用動作j_security_check提交。這是Container提供的。所以,如果登錄全成,用戶會被重定向到securedPage.jsp,否則他將被重定向到錯誤頁面,你也有

0
在聲明的安全 web.xml

,你被宣佈爲兩, 安全資源和開放資源。

宣佈開放資源 你不寫 'AUT-constaint' 標籤

例如受保護的資源就在:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>restricted</web-resource-name> 
     <url-pattern>/*</url-pattern>   
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

和開放資源:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>open</web-resource-name> 
     <url-pattern>/path/to/open/resource</url-pattern>   
    </web-resource-collection> 
</security-constraint>