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