建站技術網專注分享網站建設技術,網站建設教程,真正幫你學會做網站技術,輕松解決網站建設過程中遇到的常見問題,為廣大站長服務。 網站地圖 | 收藏本站 | 訂閱
域名投資,就來找米網,認準網址:www.zhaomi.cc 專業仿站,就到仿站網:www.fangzhan.org
  站內公告: ·帝國cms教程內容已更新,歡迎關注     ·建站技術網采用阿里云服務器,備案已通    
您當前的位置:建站技術網 > 服務器教程 > tomcat教程

Tomcat學習總結(5)——Tomcat容器管理安全的幾種驗證方式

時間:2018-02-04 15:16:08  來源:網絡收集  整理: 建站技術網 www.txwlqq.com     點擊:19次

當訪問服務器中受保護的資源時,容器管理的驗證方法可以控制確認用戶身份的方式。Tomcat支持四種容器管理的安全防護,它們是:

  • BASIC (基本驗證):通過HTTP驗證,需要提供base64編碼文本的用戶口令

  • DIGEST (摘要驗證):通過HTTP驗證,需要提供摘要編碼字符串的用戶口令

  • FORM (表單驗證):在網頁的表單上要求提供密碼

  • 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,此處不贅述。

server.xml中的UserDatabaseRealm(如果tomcat使用的是其他Realm,也一樣的)里增加digest屬性:

接下來,要生成tomcat可識別的MD5密碼。方式有兩種,正如官網描述:

To calculate the digested value of a cleartext password, two convenience techniques are supported:

  • If you are writing an application that needs to calculate digested passwords dynamically, call the static  Digest() method of the  org.apache.catalina.realm.RealmBase  class, passing the cleartext password and the digest algorithm name as arguments. This method will return the digested password.

  • If you want to execute a command line utility to calculate the digested password, simply execute

    <code>CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {cleartext-password} </code>

    and the digested version of this cleartext password will be returned to standard output.

方式一:用代碼來生成:

import org.apache.catalina.realm.RealmBase;

public class T {
    public static void main(String[] args) {
        //參數1:要加密的字符串;參數2:加密算法;參數3:字符串的編碼
        String base = RealmBase.Digest("alvis:MyConstraints:pwd", "MD5", null);
        System.out.println(base);
    }
}

由于RealmBase類在catalina.jar包中,如果項目中沒有這個類,可在項目上右鍵–>Java Build Path–> Libraries–>Add Library–>選擇Server Runtime–>選擇Apache Tomcat V8.0(其實7.0也行),如圖:

方式二:用腳本來生成:

在tomcat/bin目錄下有個digest.sh(Linux系統)或digest.bat(Windows系統)腳本,運行這個腳本,傳入摘要算法和參數即可,這里我在Windows系統上運行,如圖:

這里的-a指定摘要算法為MD5,要 特別注意這里的參數是:{用戶名}:{Realm名}:{密碼明文} 。用戶名就是tomcat-users.xml中配置的<user>名字(這里為alvis),Realm名是在web.xml中配置的<realm-name>(這里為MyConstraints),密碼明文即該用戶用于登錄的密碼(我這里設為pwd)。

只有這樣的參數加密后的密碼,在tomcat-users.xml中配置才有效,否則是登錄不了的。由于我是參考《Tomcat權威指南(第二版)》 的步驟做的,之前試了很久都不知道為什么登錄不了,結果在 官網 找到答案,是這么描述的:

If using digested passwords with DIGEST authentication, the cleartext used to generate the digest is different and the digest must use the MD5 algorithm. In the examples above {cleartext-password}must be replaced with {username}:{realm}:{cleartext-password} . For example, in a development environment this might take the form  testUser:Authentication required:testPassword . The value for  {realm} is taken from the  <realm-name> element of the web application’s  <login-config> . If not specified in web.xml, the default value of  Authentication required is used.

大意是說,如果使用DIGEST方式驗證,用于生成摘要的明文必須被替換為這種格式。實踐出真知,所以還是不能完全看書啊,動手實踐才是實在的。

然后就是在tomcat-users.xml中配置生成的密碼(通過下方的截圖,可以比較password跟上方digest.bat腳本生成的密碼是否一致):

之后重啟tomcat,效果自然是跟使用基本驗證的效果一樣了。

表單驗證

當web.xml文件中的auth-method元素設置為FORM時,表明應用使用的是表單驗證。當用戶請求Web應用程序受保護的資源時,表單驗證會跳轉至配置的登錄頁面。當登錄失敗時,還需要一個驗證失敗的頁面,還是上面的例子,看配置:

web.xml

<security-constraint>
    <web-resource-collection>
        <http-method>GET</http-method>
        <web-resource-name>tomcat member part</web-resource-name>
        <url-pattern>/protect/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>member</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>MyConstraints</realm-name>
    <form-login-config>
        <form-login-page>/form/login.html</form-login-page>
        <form-error-page>/form/error.html</form-error-page>
    </form-login-config>
</login-config>

這里的form/login.html是用于登錄的頁面,而form/error.html則是驗證失敗后跳轉到的頁面(這兩個頁面在上方的工程結構圖中已經有了)。

login.html

<html>
    <body>
    <h2>Login Page.</h2>

    <form method="post" action="j_security_check" name="loginForm">
        <input type="text" name="j_username" /><br>
        <input type="password" name="j_password" /><br>
        <input type="submit" value="Login" />
    </form>

    </body>
</html>

注意:這里form的action=” j_security_check “,賬號的name=” j_username “和密碼的name=”j_password “都是不可變的,否則配置的驗證規則不起作用。

server.xml中,要 去掉 Realm中添加的“ digest=MD5 ”這個屬性:

tomcat-users.xml中 使用明文 保存密碼:

效果(僅在訪問protect目錄下的資源時才出現Login Page):

輸入錯誤的賬號和密碼,跳轉至form/error.html頁面:

輸入正確的賬號和密碼,跳轉至受保護的頁面:

客戶端證書驗證


標簽:
文章標題:Tomcat學習總結(5)——Tomcat容器管理安全的幾種驗證方式
文章網址:http://www.txwlqq.com/fuwuqiJiaocheng/tomcat/3879.html
上一篇:Tomcat學習總結(4)——Tomca常用配置詳解
下一篇: Tomcat學習總結(6)——Tomca常用配置詳解
來頂一下
返回首頁
返回首頁
相關文章
    無相關信息
推薦資訊
如何通過SEO優化排名賺錢?SEO賺錢方法
如何通過SEO優化排名賺
seo優化教程:網站seo內容優化
seo優化教程:網站seo
SEO細節:企業SEO如何快速為新站做出效果
SEO細節:企業SEO如何
電商技術將如何發展?2018年有這五個大膽預測
電商技術將如何發展?
最新文章
欄目更新
欄目熱門
成人黄色