Shiro架構(gòu)與配置課件_第1頁(yè)
Shiro架構(gòu)與配置課件_第2頁(yè)
Shiro架構(gòu)與配置課件_第3頁(yè)
Shiro架構(gòu)與配置課件_第4頁(yè)
Shiro架構(gòu)與配置課件_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Shiro架構(gòu)與配置

廣州市玄武無(wú)線科技有限公司Shiro簡(jiǎn)介ApacheShiro是Java的一個(gè)安全框架,旨在簡(jiǎn)化身份驗(yàn)證和授權(quán)。提供了認(rèn)證、授權(quán)、加密和會(huì)話管理等功能。認(rèn)證-用戶身份識(shí)別,常被稱為用戶“登錄”;授權(quán)-訪問(wèn)控制;密碼加密-保護(hù)或隱藏?cái)?shù)據(jù)防止被偷窺;會(huì)話管理-每用戶相關(guān)的時(shí)間敏感的狀態(tài)。對(duì)于任何一個(gè)應(yīng)用程序,Shiro都可以提供全面的安全管理服務(wù)。并且相對(duì)于其他安全框架,Shiro要簡(jiǎn)單的多。Shiro功能短彩管理報(bào)表統(tǒng)監(jiān)控服務(wù)功能理SessionManager:會(huì)話管理,即用戶登錄后就是一次會(huì)話,在沒(méi)有退出之前,它的所有信息都在會(huì)話中;會(huì)話可以是普通JavaSE環(huán)境的,也可以是如Web環(huán)境的;Cryptography:加密,保護(hù)數(shù)據(jù)的安全性,如密碼加密存儲(chǔ)到數(shù)據(jù)庫(kù),而不是明文存儲(chǔ);WebSupport:Web支持,可以非常容易的集成到Web環(huán)境;Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權(quán)限不必每次去查,這樣可以提高效率;Concurrency:shiro支持多線程應(yīng)用的并發(fā)驗(yàn)證,即如在一個(gè)線程中開(kāi)啟另一個(gè)線程,能把權(quán)限自動(dòng)傳播過(guò)去;Testing:提供測(cè)試支持;RunAs:允許一個(gè)用戶假裝為另一個(gè)用戶(如果他們?cè)试S)的身份進(jìn)行訪問(wèn);RememberMe:記住我,這個(gè)是非常常見(jiàn)的功能,即一次登錄后,下次再來(lái)的話不用登錄了。Authentication:身份認(rèn)證/登錄,驗(yàn)證用戶是不是擁有相應(yīng)的身份;Authorization:授權(quán),即權(quán)限驗(yàn)證,驗(yàn)證某個(gè)已認(rèn)證的用戶是否擁有某個(gè)權(quán)限;即判斷用戶是否能做事情,常見(jiàn)的如:驗(yàn)證某個(gè)用戶是否擁有某個(gè)角色?;蛘呒?xì)粒度的驗(yàn)證某個(gè)用戶對(duì)某個(gè)資源是否具有某個(gè)權(quán)限;Shiro架構(gòu)Subject:主體,代表了當(dāng)前“用戶”,這個(gè)用戶不一定是一個(gè)具體的人,與當(dāng)前應(yīng)用交互的任何東西都是Subject,如網(wǎng)絡(luò)爬蟲(chóng),機(jī)器人等;即一個(gè)抽象概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會(huì)委托給SecurityManager;可以把Subject認(rèn)為是一個(gè)門面;SecurityManager才是實(shí)際的執(zhí)行者;SecurityManager:安全管理器;即所有與安全有關(guān)的操作都會(huì)與SecurityManager交互;且它管理著所有Subject;可以看出它是Shiro的核心,它負(fù)責(zé)與后邊介紹的其他組件進(jìn)行交互,如果學(xué)習(xí)過(guò)SpringMVC,你可以把它看成DispatcherServlet前端控制器;Realm:域,Shiro從從Realm獲取安全數(shù)據(jù)(如用戶、角色、權(quán)限),就是說(shuō)SecurityManager要驗(yàn)證用戶身份,那么它需要從Realm獲取相應(yīng)的用戶進(jìn)行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應(yīng)的角色/權(quán)限進(jìn)行驗(yàn)證用戶是否能進(jìn)行操作;可以把Realm看成DataSource,即安全數(shù)據(jù)源;從外部來(lái)看Shiro,可以看到:應(yīng)用代碼直接交互的對(duì)象是Subject,也就是說(shuō)Shiro的對(duì)外API

核心就是Subject;Shiro架構(gòu)也就是說(shuō)對(duì)于我們而言,最簡(jiǎn)單的一個(gè)Shiro應(yīng)用:1、應(yīng)用代碼通過(guò)Subject來(lái)進(jìn)行認(rèn)證和授權(quán),而Subject又委托給SecurityManager;2、我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的用戶及其權(quán)限進(jìn)行判斷。從以上也可以看出,Shiro不提供維護(hù)用戶/權(quán)限,而是通過(guò)Realm讓開(kāi)發(fā)人員自己注入。Shiro架構(gòu)——從內(nèi)部來(lái)看Shiro架構(gòu)——從內(nèi)部來(lái)看Subject:主體,可以看到主體可以是任何可以與應(yīng)用交互的“用戶”;SecurityManager:相當(dāng)于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心臟;所有具體的交互都通過(guò)SecurityManager進(jìn)行控制;它管理著所有Subject、且負(fù)責(zé)進(jìn)行認(rèn)證和授權(quán)、及會(huì)話、緩存的管理。Authenticator:認(rèn)證器,負(fù)責(zé)主體認(rèn)證的,這是一個(gè)擴(kuò)展點(diǎn),如果用戶覺(jué)得Shiro默認(rèn)的不好,可以自定義實(shí)現(xiàn);其需要認(rèn)證策略(AuthenticationStrategy),即什么情況下算用戶認(rèn)證通過(guò)了;Authrizer:授權(quán)器,或者訪問(wèn)控制器,用來(lái)決定主體是否有權(quán)限進(jìn)行相應(yīng)的操作;即控制著用戶能訪問(wèn)應(yīng)用中的哪些功能;Realm:可以有1個(gè)或多個(gè)Realm,可以認(rèn)為是安全實(shí)體數(shù)據(jù)源,即用于獲取安全實(shí)體的;可以是JDBC實(shí)現(xiàn),也可以是LDAP實(shí)現(xiàn),或者內(nèi)存實(shí)現(xiàn)等等;由用戶提供;注意:Shiro不知道你的用戶/權(quán)限存儲(chǔ)在哪及以何種格式存儲(chǔ);所以我們一般在應(yīng)用中都需要實(shí)現(xiàn)自己的Realm;Shiro架構(gòu)——從內(nèi)部來(lái)看SessionManager:如果寫過(guò)Servlet就應(yīng)該知道Session的概念,Session呢需要有人去管理它的生命周期,這個(gè)組件就是SessionManager;而Shiro并不僅僅可以用在Web環(huán)境,也可以用在如普通的JavaSE環(huán)境、EJB等環(huán)境;所有呢,Shiro就抽象了一個(gè)自己的Session來(lái)管理主體與應(yīng)用之間交互的數(shù)據(jù);這樣的話,比如我們?cè)赪eb環(huán)境用,剛開(kāi)始是一臺(tái)Web服務(wù)器;接著又上了臺(tái)EJB服務(wù)器;這時(shí)想把兩臺(tái)服務(wù)器的會(huì)話數(shù)據(jù)放到一個(gè)地方,這個(gè)時(shí)候就可以實(shí)現(xiàn)自己的分布式會(huì)話(如把數(shù)據(jù)放到Memcached服務(wù)器);SessionDAO:DAO大家都用過(guò),數(shù)據(jù)訪問(wèn)對(duì)象,用于會(huì)話的CRUD,比如我們想把Session保存到數(shù)據(jù)庫(kù),那么可以實(shí)現(xiàn)自己的SessionDAO,通過(guò)如JDBC寫到數(shù)據(jù)庫(kù);比如想把Session放到Memcached中,可以實(shí)現(xiàn)自己的MemcachedSessionDAO;另外SessionDAO中可以使用Cache進(jìn)行緩存,以提高性能;CacheManager:緩存控制器,來(lái)管理如用戶、角色、權(quán)限等的緩存的;因?yàn)檫@些數(shù)據(jù)基本上很少去改變,放到緩存中后可以提高訪問(wèn)的性能Cryptography:密碼模塊,Shiro提高了一些常見(jiàn)的加密組件用于如密碼加密/解密的。Shiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證1.身份驗(yàn)證

身份驗(yàn)證,即在應(yīng)用中誰(shuí)能證明他就是他本人。一般提供如他們的身份ID一些標(biāo)識(shí)信息來(lái)表明他就是他本人,如提供身份證,用戶名/密碼來(lái)證明。

在shiro中,用戶需要提供principals(身份)和credentials(證明)給shiro,從而應(yīng)用能驗(yàn)證用戶身份:principals:身份,即主體的標(biāo)識(shí)屬性,可以是任何東西,如用戶名、郵箱等,唯一即可。一個(gè)主體可以有多個(gè)principals,但只有一個(gè)Primaryprincipals,一般是用戶名/密碼/手機(jī)號(hào)。credentials:證明/憑證,即只有主體知道的安全值,如密碼/數(shù)字證書(shū)等。

最常見(jiàn)的principals和credentials組合就是用戶名/密碼了。接下來(lái)先進(jìn)行一個(gè)基本的身份認(rèn)證。另外兩個(gè)相關(guān)的概念是之前提到的Subject及Realm,分別是主體及驗(yàn)證主體的數(shù)據(jù)源。Shiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證Shiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證流程如下:1、首先調(diào)用Subject.login(token)進(jìn)行登錄,其會(huì)自動(dòng)委托給SecurityManager,調(diào)用之前必須通過(guò)SecurityUtils.setSecurityManager()設(shè)置;2、SecurityManager負(fù)責(zé)真正的身份驗(yàn)證邏輯;它會(huì)委托給Authenticator進(jìn)行身份驗(yàn)證;3、Authenticator才是真正的身份驗(yàn)證者,ShiroAPI中核心的身份認(rèn)證入口點(diǎn),此處可以自定義插入自己的實(shí)現(xiàn);4、Authenticator可能會(huì)委托給相應(yīng)的AuthenticationStrategy進(jìn)行多Realm身份驗(yàn)證,默認(rèn)ModularRealmAuthenticator會(huì)調(diào)用AuthenticationStrategy進(jìn)行多Realm身份驗(yàn)證;5、Authenticator會(huì)把相應(yīng)的token傳入Realm,從Realm獲取身份驗(yàn)證信息,如果沒(méi)有返回/拋出異常表示身份驗(yàn)證失敗了。此處可以配置多個(gè)Realm,將按照相應(yīng)的順序及策略進(jìn)行訪問(wèn)。Shiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證Shiro默認(rèn)提供的RealmShiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證一般繼承AuthorizingRealm(授權(quán))即可;其繼承了AuthenticatingRealm(即身份驗(yàn)證),而且也間接繼承了CachingRealm(帶有緩存實(shí)現(xiàn))。其中主要默認(rèn)實(shí)現(xiàn)如下:org.apache.shiro.realm.text.IniRealm:[users]部分指定用戶名/密碼及其角色;[roles]部分指定角色即權(quán)限信息;org.apache.shiro.realm.text.PropertiesRealm:user.username=password,role1,role2指定用戶名/密碼及其角色;role.role1=permission1,permission2指定角色及權(quán)限信息;org.apache.shiro.realm.jdbc.JdbcRealm:通過(guò)sql查詢相應(yīng)的信息,如“selectpasswordfromuserswhereusername=?”獲取用戶密碼,“selectpassword,password_saltfromuserswhereusername=?”獲取用戶密碼及鹽;“selectrole_namefromuser_roleswhereusername=?”獲取用戶角色;“selectpermissionfromroles_permissionswhererole_name=?”獲取角色對(duì)應(yīng)的權(quán)限信息;也可以調(diào)用相應(yīng)的api進(jìn)行自定義sql;Shiro應(yīng)用簡(jiǎn)介—身份驗(yàn)證Authenticator及AuthenticationStrategyAuthenticator的職責(zé)是驗(yàn)證用戶帳號(hào),是ShiroAPI中身份驗(yàn)證核心的入口點(diǎn):如果驗(yàn)證成功,將返回AuthenticationInfo驗(yàn)證信息;此信息中包含了身份及憑證;如果驗(yàn)證失敗將拋出相應(yīng)的AuthenticationException實(shí)現(xiàn)。SecurityManager接口繼承了Authenticator,另外還有一個(gè)ModularRealmAuthenticator實(shí)現(xiàn),其委托給多個(gè)Realm進(jìn)行驗(yàn)證,驗(yàn)證規(guī)則通過(guò)AuthenticationStrategy接口指定,默認(rèn)提供的實(shí)現(xiàn):FirstSuccessfulStrategy:只要有一個(gè)Realm驗(yàn)證成功即可,只返回第一個(gè)Realm身份驗(yàn)證成功的認(rèn)證信息,其他的忽略;AtLeastOneSuccessfulStrategy:只要有一個(gè)Realm驗(yàn)證成功即可,和FirstSuccessfulStrategy不同,返回所有Realm身份驗(yàn)證成功的認(rèn)證信息;AllSuccessfulStrategy:所有Realm驗(yàn)證成功才算成功,且返回所有Realm身份驗(yàn)證成功的認(rèn)證信息,如果有一個(gè)失敗就失敗了。ModularRealmAuthenticator默認(rèn)使用AtLeastOneS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論