shiro将session认证改成token认证_Shiro 运行过程
什么是shiro
shiro是apache的一個(gè)開源框架,是一個(gè)權(quán)限管理的框架,實(shí)現(xiàn) 用戶認(rèn)證、用戶授權(quán)、
shiro架構(gòu)
subject:主體,可以是用戶也可以是程序,主體要訪問(wèn)系統(tǒng),系統(tǒng)需要對(duì)主體進(jìn)行認(rèn)證、授權(quán)。
securityManager:安全管理器,主體進(jìn)行認(rèn)證和授權(quán)都是通過(guò)securityManager進(jìn)行。
authenticator:認(rèn)證器,主體進(jìn)行認(rèn)證最終通過(guò)authenticator進(jìn)行的。
authorizer:授權(quán)器,主體進(jìn)行授權(quán)最終通過(guò)authorizer進(jìn)行的。
sessionManager:web應(yīng)用中一般是用web容器對(duì)session進(jìn)行管理,shiro也提供一套session管理的方式。
SessionDao: 通過(guò)SessionDao管理session數(shù)據(jù),針對(duì)個(gè)性化的session數(shù)據(jù)存儲(chǔ)需要使用sessionDao。
cache Manager:緩存管理器,主要對(duì)session和授權(quán)數(shù)據(jù)進(jìn)行緩存,比如將授權(quán)數(shù)據(jù)通過(guò)cacheManager進(jìn)行緩存管理,和ehcache整合對(duì)緩存數(shù)據(jù)進(jìn)行管理。
realm:域,領(lǐng)域,相當(dāng)于數(shù)據(jù)源,通過(guò)realm存取認(rèn)證、授權(quán)相關(guān)數(shù)據(jù)。
注意:在realm中存儲(chǔ)授權(quán)和認(rèn)證的邏輯。
cryptography:密碼管理,提供了一套加密/解密的組件,方便開發(fā)。比如提供常用的散列、加/解密等功能。
比如 md5散列算法。
認(rèn)證過(guò)程,授權(quán)過(guò)程
認(rèn)證過(guò)程
1、通過(guò)ini配置文件創(chuàng)建securityManager
2、調(diào)用subject.login方法主體提交認(rèn)證,提交的token
3、securityManager進(jìn)行認(rèn)證,securityManager最終由ModularRealmAuthenticator進(jìn)行認(rèn)證。
4、ModularRealmAuthenticator調(diào)用IniRealm(給realm傳入token) 去ini配置文件中查詢用戶信息
5、IniRealm根據(jù)輸入的token(UsernamePasswordToken)從 shiro.ini查詢用戶信息,根據(jù)賬號(hào)查詢用戶信息(賬號(hào)和密碼)
如果查詢到用戶信息,就給ModularRealmAuthenticator返回用戶信息(賬號(hào)和密碼)
如果查詢不到,就給ModularRealmAuthenticator返回null
6、ModularRealmAuthenticator接收IniRealm返回Authentication認(rèn)證信息
如果返回的認(rèn)證信息是null,ModularRealmAuthenticator拋出異常(org.apache.shiro.authc.UnknownAccountException)
如果返回的認(rèn)證信息不是null(說(shuō)明inirealm找到了用戶),對(duì)IniRealm返回用戶密碼 (在ini文件中存在)
和 token中的密碼 進(jìn)行對(duì)比,如果不一致拋出異常(org.apache.shiro.authc.IncorrectCredentialsException)
授權(quán)流程
1、對(duì)subject進(jìn)行授權(quán),調(diào)用方法isPermitted("permission串")
2、SecurityManager執(zhí)行授權(quán),通過(guò)ModularRealmAuthorizer執(zhí)行授權(quán)
3、ModularRealmAuthorizer執(zhí)行realm(自定義的Realm)從數(shù)據(jù)庫(kù)查詢權(quán)限數(shù)據(jù)
調(diào)用realm的授權(quán)方法:doGetAuthorizationInfo
4、realm從數(shù)據(jù)庫(kù)查詢權(quán)限數(shù)據(jù),返回ModularRealmAuthorizer
5、ModularRealmAuthorizer調(diào)用PermissionResolver進(jìn)行權(quán)限串比對(duì)
6、如果比對(duì)后,isPermitted中"permission串"在realm查詢到權(quán)限數(shù)據(jù)中,說(shuō)明用戶訪問(wèn)permission串有權(quán)限,否則 沒(méi)有權(quán)限,拋出異常。
其他安全框架對(duì)比
spring中有spring security (原名Acegi),是一個(gè)權(quán)限框架,它和spring依賴過(guò)于緊密,沒(méi)有shiro使用簡(jiǎn)單。
shiro不依賴于spring,shiro不僅可以實(shí)現(xiàn) web應(yīng)用的權(quán)限管理,還可以實(shí)現(xiàn)c/s系統(tǒng),分布式系統(tǒng)權(quán)限管理,shiro屬于輕量框架,越來(lái)越多企業(yè)項(xiàng)目開始使用shiro。
使用shiro實(shí)現(xiàn)系統(tǒng)的權(quán)限管理,有效提高開發(fā)效率,從而降低開發(fā)成本。
總結(jié)
以上是生活随笔為你收集整理的shiro将session认证改成token认证_Shiro 运行过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: lua 区间比较_Lua(模糊查找):判
- 下一篇: 有效数据外含有额外数据_basemap之