當訪問服務器中受保護的資源時,容器管理的驗證方法可以控制確認用戶身份的方式。Tomcat支持四種容器管理的安全防護,它們是:
1、BASIC(基本驗證):通過HTTP驗證,需要提供base64編碼文本的用戶口令
2、DIGEST(摘要驗證):通過HTTP驗證,需要提供摘要編碼字符串的用戶口令
3、FORM(表單驗證):在網頁的表單上要求提供密碼
4、CLIENT-CERT(客戶端證書驗證):以客戶端證書來確認用戶的身份
基本驗證
當web.xml文件中的auth-method元素設置為BASIC時,表明應用使用的是基本驗證,每次瀏覽器請求受保護的Web應用資源時,Tomcat都會使用HTTP基本驗證向瀏覽器索取用戶名和密碼(以頁面彈窗的方式)。使用這種驗證方法,所有的密碼都會以base64編碼的文本在網絡上傳輸。
先看下項目結構(我用Maven管理的依賴):

其中,protect/protect.jsp是被保護的,需要授權訪問。
說明:本文提到的tomcat-users.xml,server.xml等文件,如果是在Eclipse中啟動tomcat,則這些文件在Eclipse中的Servers工程下對應的tomcat下,如圖:

而本文提到的web.xml是指項目自己的web.xml,而非Servers項目下Tomcat中的web.xml。
web.xml<security-constraint>
<web-resource-collection> <http-method>GET</http-method> <web-resource-name>tomcat protect page</web-resource-name> <!-- /protect目錄下的所有資源是受保護的 --> <url-pattern>/protect/*</url-pattern> </web-resource-collection> <auth-constraint> <!-- 這里的member要與tomcat-user.xml中配置的role一致 --> <role-name>member</role-name> </auth-constraint></security-constraint><login-config> <!-- 驗證方式,可選的值為: "BASIC", "DIGEST", "FORM", "CLIENT-CERT" --> <auth-method>BASIC</auth-method> <!-- 使用的Realm名字,注意這里不能有空格 --> <realm-name>MyConstraints</realm-name></login-config> tomcat-user.xml(注意如果是在Eclipse中啟動tomcat,這個tomcat-user.xml在Eclipse中的Servers工程下)<role rolename="member"/>
<!-- member角色下有一個叫alvis的用戶,密碼為pwd --><user username="alvis" password="pwd" roles="member"/>重啟tomcat后,訪問protect目錄下的資源,情況是這樣的:

輸入賬戶alvis,密碼pwd后,訪問成功(當然,非protect目錄下的資源是可以直接訪問的):

摘要驗證
當web.xml文件中的auth-method元素設置為DIGEST時,表明應用使用的是摘要驗證。還是上面的例子,看配置:
web.xml和基本驗證一樣,只是auth-method修改為DIGEST,此處不贅述。
新聞熱點
疑難解答