2011-06-09 69 views
2

我想在使用BASIC驗證的tomcat-users.xml中使用哈希密碼。我添加digest =「SHA」到領域定義。 UserDatabase部分在$ TOMCAT_HOME/conf目錄/ server.xml中定義爲這樣的:如何在tomcat6中使用BASIC驗證的哈希密碼?

<GlobalNamingResources> 
<Resource name="UserDatabase" auth="Container" 
      type="org.apache.catalina.UserDatabase" 
      description="User database that can be updated and saved" 
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
      pathname="conf/tomcat-users.xml" /> 
</GlobalNamingResources> 
... 
<Engine> 
... 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      digest="SHA" 
      resourceName="UserDatabase" /> 
... 
</Engine> 

但重新啓動Tomcat後,仍然會將在$ TOMCAT_HOME/conf目錄/ tomcat的-users.xml中的密碼爲純文本以外的所有定義。

<?xml version='1.0' encoding='utf-8'?> 
<tomcat-users> 
<user username="guest" password="e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4" roles="role1" /> 
</tomcat-users> 

I.e.我可以使用用戶名/密碼guest/e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4登錄,但不能以guest/secret的身份登錄。

請問我做錯了什麼?

+0

好吧,看起來像是重寫了web應用程序中的領域定義,因爲/ manager /按預期工作。 – Aleksey 2011-06-09 22:03:06

回答

0

你的解決方案應該工作到Tomcat的7,但是從Tomcat 8日起,您必須指定內部RealmCredentialHandler部分,如下圖所示:

的Tomcat 6 ... 7:

 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      digest="sha" 
      resourceName="UserDatabase" /> 

Tomcat的8:

 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"> 
      <CredentialHandler 
       className="org.apache.catalina.realm.MessageDigestCredentialHandler"  
       algorithm="sha" /> 
     </Realm> 

注意:爲了更安全的哈希,像PBKDF2WithHmacSHA512,請參閱this answer