您應該使用由Tomcat,Websphere,Glassfish等Servlet容器提供的JAAS安全性。
默認情況下,這些容器支持這些身份驗證類型:
- BASIC
- DIGEST
- FORM
- CLIENT-CERT
HTTP基本驗證
指定HTTP基本身份驗證要求服務器從Web客戶端請求用戶名和密碼,並通過將其與指定或默認領域中授權用戶的數據庫進行比較來驗證用戶名和密碼是否有效。
當您不指定身份驗證機制時,基本身份驗證是默認設置。
當使用基本身份驗證,發生下列操作:
- 客戶端請求訪問受保護的資源。
- Web服務器返回一個請求用戶名和密碼的對話框。
- 客戶端提交用戶名和密碼到服務器。 4. \服務器在指定領域中對用戶進行身份驗證,如果成功,則返回請求的資源。
下圖顯示了指定HTTP基本認證時會發生的情況。 ![enter image description here](https://i.stack.imgur.com/bcwC5.gif)
HTTP基本認證的客戶端和服務器之間的HTTP基本認證四個步驟圖
基於表單的認證
基於表單的認證允許開發者控制的外觀和感覺通過自定義HTTP瀏覽器呈現給最終用戶的登錄屏幕和錯誤頁面來登錄認證屏幕。當聲明基於表單的身份驗證時,會發生以下操作。
- 客戶端請求訪問受保護的資源。
- 如果客戶端未經身份驗證,服務器會將客戶端重定向到登錄頁面。
- 客戶端提交登錄表單到服務器。
- 服務器嘗試驗證用戶。
- 如果身份驗證成功,則會檢查經過身份驗證的用戶主體,以確保其身份處於有權訪問資源的角色中。如果用戶被授權,則服務器通過使用存儲的URL路徑將客戶端重定向到資源。
- 如果認證失敗,客戶端將被轉發或重定向到錯誤頁面。
下圖顯示了指定基於表單的身份驗證時發生的情況。
![enter image description here](https://i.stack.imgur.com/FeWH2.gif)
當你創建一個基於表單的登錄,一定要保持使用cookie或SSL會話信息會話。
要使認證正常進行,登錄表單的動作必須始終爲j_security_check。此限制是爲了使登錄表單可以工作,而不管它是用於哪種資源,並避免要求服務器指定出站表單的操作字段。下面的代碼片段顯示形式應如何編碼到HTML頁面:
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="password" name="j_password">
</form>
摘要式身份驗證
像基本身份驗證,摘要式身份驗證驗證基於用戶名和密碼的用戶。但是,與基本身份驗證不同,摘要身份驗證不會通過網絡發送用戶密碼。相反,客戶端會發送密碼和附加數據的單向加密散列。雖然密碼不是通過網絡發送的,但摘要式身份驗證要求身份驗證容器可以使用明文密碼,以便它可以通過計算預期的摘要來驗證接收到的身份驗證器。
參考文獻: