Shiro認證時的密碼比對


在前面一節《Shiro在Web環境下集成Spring的大致工作流程》的最后一步中提到由Shiro完整密碼比對。

那么具體是怎么工作的?

1,既然shiro會把密碼來進行比對,當然會調用 UserNamePasswordkToken 中的 getPassword() 方法了。在該方法中打上斷點,往前跟蹤一下即可。
     

 

2,開啟debug模式,跟蹤發現 org.apache.shiro.authc.credential.SimpleCredentialsMatcher 類進行密碼的比對
     

 

3,繼續跟蹤,發現我們自定義Realm的父類方法調用了 CrendebtialsMatcher組件 進行密碼比對
     

 

CrendentialsMatcher組件(憑證匹配器)作用
     1,用來進行密碼比對。
     2,用來對密碼進行加密。
     3,shiro提供了該組件接口的很多實現類,用於不同類型的密碼加密。
          常用的加密實現類為: HashedCrendentialsMatcher
     4,替換當前 Realm 的 crendentialsMatcher 屬性,直接使用 HasedCrendentialsMatcher 對象,並設置加密算法即可。
 
結論:
     ①通過 AuthenticatingRealm 的 CrendentialsMatcher 屬性來進行的密碼的比對
     ②指定具體的 CrendentialsMatcher 接口的實現類來 設置加密算法,鹽值和循環加密次數
     ③如果兩個用戶擁有相同的原始密碼,那么加密后的數據也是一樣的,這還是有點安全隱患的,所以 鹽值最好設置為一個用戶的唯一值(一般采用用戶名)。
     ④在自定義Realm的認證方法(doAuthenticationInfo方法),返回的SimpeAuthenticationInfo對象時,需要采用帶有ByteSource參數的構造函數來構建對象。
          ByteSource對象可以采用 ByteSource.Util.byte(String UserID)獲取;
     ⑤使用 new SimpleHash(hashAlgorithmName,salt,hashIterations); 來計算加鹽后的密碼值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM