Shiro概述
Shiro概述
1,?什么是shiro?
Apache Shiro 是Java 的一個(gè)安全框架。Shiro 可以非常容易的開發(fā)出足夠好的應(yīng)用,其不僅可以用在JavaSE 環(huán)境,也可以用在JavaEE 環(huán)境。Shiro 可以幫助我們完成:認(rèn)證、授權(quán)、加密、會(huì)話管理、與Web 集成、緩存等。
2,為什么要學(xué)shiro
? ? ? ? 1,既然shiro將安全認(rèn)證相關(guān)的功能抽取出來組成一個(gè)框架,使用shiro就可以非常快速的完成認(rèn)證、授權(quán)等功能的開發(fā),降低系統(tǒng)成本。
? ? ? ? 2,shiro使用廣泛,shiro可以運(yùn)行在web應(yīng)用,非web應(yīng)用,集群分布式應(yīng)用中越來越多的用戶開始使用shiro。
java領(lǐng)域中spring security(原名Acegi)也是一個(gè)開源的權(quán)限管理框架,但是spring security依賴spring運(yùn)行,而shiro就相對(duì)獨(dú)立,最主要是因?yàn)閟hiro使用簡單、靈活,所以現(xiàn)在越來越多的用戶選擇shiro。
3,基本功能
1,Authentication? ??身份認(rèn)證/登錄,驗(yàn)證用戶是不是擁有相應(yīng)的身份;
2, Authorization? ? ?授權(quán),即權(quán)限驗(yàn)證,驗(yàn)證某個(gè)已認(rèn)證的用戶是否擁有某個(gè)權(quán)限;即判斷用戶是否能做事情,常見的如:驗(yàn)證某個(gè)用戶是否擁有某個(gè)角色。或者細(xì)粒度的驗(yàn)證某個(gè)用戶對(duì)某個(gè)資源是否具有某個(gè)權(quán)限;
3, Session?Manager? ??會(huì)話管理,即用戶登錄后就是一次會(huì)話,在沒有退出之前,它的所有信息都在會(huì)話中;會(huì)話可以是普通JavaSE環(huán)境的,也可以是如Web環(huán)境的;
4,Cryptography??加密,保護(hù)數(shù)據(jù)的安全性,如密碼加密存儲(chǔ)到數(shù)據(jù)庫,而不是明文存儲(chǔ);
5,Web Support? ??Web 支持,可以非常容易的集成到Web 環(huán)境;
6,Caching? ? ?緩存,比如用戶登錄后,其用戶信息、擁有的角色/權(quán)限不必每次去查,這樣可以提高效率;
7,Concurrency? ?shiro 支持多線程應(yīng)用的并發(fā)驗(yàn)證,即如在一個(gè)線程中開啟另一個(gè)線程,能?把權(quán)限自動(dòng)傳播過去;?
8,Testing? ?提供測試支持;
9,Run?As? ??允許一個(gè)用戶假裝為另一個(gè)用戶(如果他們?cè)试S)的身份進(jìn)行訪問;
10,Remember?Me??記住我,這個(gè)是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
注意:Shiro 不會(huì)去維護(hù)用戶、維護(hù)權(quán)限;這些需要我們自己去設(shè)計(jì)/提供;然后通過相應(yīng)的接口注入給Shiro即可。
4,架構(gòu)說明
1,Subject
?Subject即主體,外部應(yīng)用與subject進(jìn)行交互,subject記錄了當(dāng)前操作用戶,將用戶的概念理解為當(dāng)前操作的主體,可能是一個(gè)通過瀏覽器請(qǐng)求的用戶,也可能是一個(gè)運(yùn)行的程序。 Subject在shiro中是一個(gè)接口,接口中定義了很多認(rèn)證授相關(guān)的方法,外部程序通過subject進(jìn)行認(rèn)證授,而subject是通過SecurityManager安全管理器進(jìn)行認(rèn)證授權(quán)
2,SecurityManager【/s?'kj??r?t?/】
?SecurityManager即安全管理器,對(duì)全部的subject進(jìn)行安全管理,它是shiro的核心,負(fù)責(zé)對(duì)所有的subject進(jìn)行安全管理。通過SecurityManager可以完成subject的認(rèn)證、授權(quán)等,實(shí)質(zhì)上SecurityManager是通過Authenticator進(jìn)行認(rèn)證,通過Authorizer進(jìn)行授權(quán),通過SessionManager進(jìn)行會(huì)話管理等。
?SecurityManager是一個(gè)接口,繼承了Authenticator, Authorizer, SessionManager這三個(gè)接口。
3,Authenticator
?Authenticator即認(rèn)證器,對(duì)用戶身份進(jìn)行認(rèn)證,Authenticator是一個(gè)接口,shiro提供ModularRealmAuthenticator實(shí)現(xiàn)類,通過ModularRealmAuthenticator基本上可以滿足大多數(shù)需求,也可以自定義認(rèn)證器。
4,Authorizer
?Authorizer即授權(quán)器,用戶通過認(rèn)證器認(rèn)證通過,在訪問功能時(shí)需要通過授權(quán)器判斷用戶是否有此功能的操作權(quán)限。
5,realm
?Realm即領(lǐng)域,相當(dāng)于datasource數(shù)據(jù)源,securityManager進(jìn)行安全認(rèn)證需要通過Realm獲取用戶權(quán)限數(shù)據(jù),比如:如果用戶身份數(shù)據(jù)在數(shù)據(jù)庫那么realm就需要從數(shù)據(jù)庫獲取用戶身份信息。
?注意:不要把realm理解成只是從數(shù)據(jù)源取數(shù)據(jù),在realm中還有認(rèn)證授權(quán)校驗(yàn)的相關(guān)的代碼。
6,sessionManager
sessionManager即會(huì)話管理,shiro框架定義了一套會(huì)話管理,它不依賴web容器的session,所以shiro可以使用在非web應(yīng)用上,也可以將分布式應(yīng)用的會(huì)話集中在一點(diǎn)管理,此特性可使它實(shí)現(xiàn)單點(diǎn)登錄。
7,SessionDAO
SessionDAO即會(huì)話dao,是對(duì)session會(huì)話操作的一套接口,比如要將session存儲(chǔ)到數(shù)據(jù)庫,可以通過jdbc將會(huì)話存儲(chǔ)到數(shù)據(jù)庫。
8,CacheManager
CacheManager即緩存管理,將用戶權(quán)限數(shù)據(jù)存儲(chǔ)在緩存,這樣可以提高性能。
9,Cryptography【/kr?p't?gr?f?/】
?Cryptography即密碼管理,shiro提供了一套加密/解密的組件,方便開發(fā)。比如提供常用的散列、加/解密等功能。
總結(jié)
- 上一篇: 面板——卡片面板、常规折叠面板、手风琴折
- 下一篇: Shiro.ini文件概述