更新時間:2022-07-18 12:19:26 來源:動力節點 瀏覽1775次
在Java教程中,大家會學到shiro框架,Apache Shiro是一個強大而靈活的開源安全框架,它能夠干凈利落地處理身份認證、授權、企業會話管理和加密。相比spring security框架更簡單靈活,spring security對spring依賴較強。shiro可以實現web系統、c/s、分布式等系統權限管理。
核心組件:
Subject:主體,即當前操作用戶
SecurityManager:安全管理器,它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部組件實例,并通過它來提供安全管理的各種服務
Realm:領域,充當了Shiro與應用安全數據間的“橋梁”或者“連接器”。也就是說,當對用戶執行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息
Authenticator:認證器,AuthenticationStrategy如果存在多個realm,則按著具體的策略進行登錄控制,例如:如果有一個realm成功即可登錄、必須所有realm都成功才能登錄等
Authorizer:授權器,決定subject能擁有什么樣角色或者權限。
SessionManager:session管理器,創建和管理用戶session。通過設置這個管理器,shiro可以在任何環境下使用session。
CacheManager:緩存管理器,可以減少不必要的后臺訪問。提高應用效率,增加用戶體驗。
Cryptography:Shiro的api大幅度簡化java api中繁瑣的密碼加密。
subject(主體)請求認證,調用subject.login(token)
SecurityManager (安全管理器)執行認證
SecurityManager通過ModularRealmAuthenticator進行認證。
ModularRealmAuthenticator將token傳給realm,realm根據token中用戶信息從數據庫查詢用戶信息(包括身份和憑證)
realm如果查詢不到用戶給ModularRealmAuthenticator返回null,ModularRealmAuthenticator拋出異常(用戶不存在)
realm如果查詢到用戶給ModularRealmAuthenticator返回AuthenticationInfo(認證信息)
ModularRealmAuthenticator拿著AuthenticationInfo(認證信息)去進行憑證(密碼)比對。如果一致則認證通過,如果不致拋出異常(憑證錯誤)。
對subject進行授權,調用方法isPermitted("*")或者hasRole("*")
SecurityManager執行授權,通過ModularRealmAuthorizer執行授權
ModularRealmAuthorizer執行realm(自定義的CustomRealm)從數據庫查詢權限數據調用realm的授權方法:doGetAuthorizationInfo
realm從數據庫查詢權限數據,返回ModularRealmAuthorizer
ModularRealmAuthorizer調用PermissionResolver進行權限串比對
如果比對后,isPermitted中"permission串"在realm查詢到權限數據中,說明用戶訪問permission串有權限,否則沒有權限,拋出異常。
以上就是關于“Shiro工作原理的解析”的介紹,大家如果對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的Shiro入門視頻,里面的課程內容由淺到深,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習