Spring整合Shiro(三)-筆記篇

筆記

Shiro登陸認證流程
1.通過SeucrityUtils獲取當前用戶(Subject),調用SecurityUtils.getSubject()方法
2.判斷用戶是否登陸currentUser.isAuthenticated()
3.如果用戶沒有登陸,獲取登錄頁面傳過來的值(SpringMVC@Handler)
4.創建令牌UsernamePasswordToken token = new UsernamePasswordToken(#userName, #password)
5.通過Realm(繼承org.apache.shiro.realm.AuthenticatingRealm)與數據庫中的用戶密碼比對
密碼的比對:通過 AuthenticatingRealm 的 credentialsMatcher 屬性來進行的密碼的比對!

密碼加密
# 如何把一個字符串加密爲 MD5? 
   替換當前 Realm 的 credentialsMatcher 屬性. 直接使用 HashedCredentialsMatcher 對象, 並設置加密算法即可. 

# 使用 MD5 鹽值加密: 
 如何做到:
1). 在 doGetAuthenticationInfo 方法返回值創建 SimpleAuthenticationInfo 對象的時候, 需要使用
    SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName) 構造器
2). 使用 ByteSource.Util.bytes() 來計算鹽值. 
3). 鹽值需要唯一: 一般使用隨機字符串或 user id
4). 使用 new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations); 來計算鹽值加密後的密碼的值.

#如何授權
1. 授權需要繼承 AuthorizingRealm 類, 並實現其 doGetAuthorizationInfo 方法
2. AuthorizingRealm 類繼承自 AuthenticatingRealm, 但沒有實現 AuthenticatingRealm 中的 
   doGetAuthenticationInfo, 所以認證和授權只需要繼承 AuthorizingRealm 就可以了. 同時實現他的兩個抽象方法.



總結:1.Shiro加密原先實現方法都是寫加密工具類,可以通過配置MD5鹽值加密,這樣加密都不用自己實現,當然你向數據庫中存數據時當然要手寫加密算法,一會把之前做多Realm測試的加密算法貼出來
2.URL權限資源可以放到配置文件或數據庫中,這些就降低了Spring配置文件的壓力,一堆堆的URL配置很佔空間.
3.授權時要注意在配置MD5鹽值加密時注意接口
4.我在學習時候已經把上面的筆記寫在配置文件中了

    public static void main(String[] args) {
        String algorithmName="MD5" ;
        Object source="admin1234" ;
        String salt="admin";
        int hashIterations=1024   ;
        Object result=  new SimpleHash(algorithmName, source, salt, hashIterations) ; 
        System.out.println(result);  //02bad5ac06ea6ce0be3a24fd39781d11
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章