Shiro 簡介

Shiro 可以非常容易的開發(fā)出足夠好的應(yīng)用,其不僅可以用在 JavaSE 環(huán)境骗随,也可以用在JavaEE 環(huán)境。Shiro 可以幫助我們完成:認證赴叹、授權(quán)鸿染、加密、會話管理乞巧、與 Web 集成涨椒、緩存等。

  1. Authentication:身份認證/登錄绽媒,驗證用戶是不是擁有相應(yīng)的身份蚕冬;

  2. Authorization:授權(quán),即權(quán)限驗證是辕,驗證某個已認證的用戶是否擁有某個權(quán)限囤热;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色获三∨园或者細粒度的驗證某個用戶對某個資源是否具有某個權(quán)限;

  3. Session Manager:會話管理疙教,即用戶登錄后就是一次會話棺聊,在沒有退出之前,它的所有信息都在會話中贞谓;會話可以是普通JavaSE 環(huán)境的躺屁,也可以是如 Web 環(huán)境的;

  4. Cryptography:加密经宏,保護數(shù)據(jù)的安全性犀暑,如密碼加密存儲到數(shù)據(jù)庫驯击,而不是明文存儲;

  5. Web Support:Web 支持耐亏,可以非常容易的集成到 Web 環(huán)境徊都;

  6. Caching:緩存,比如用戶登錄后广辰,其用戶信息暇矫、擁有的角色/權(quán)限不必每次去查,這樣可以提高效率择吊;

  7. Concurrency:shiro 支持多線程應(yīng)用的并發(fā)驗證李根,即如在一個線程中開啟另一個線程,能把權(quán)限自動傳播過去几睛;

  8. Testing:提供測試支持房轿;

  9. Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;

  10. Remember Me:記住我所森,這個是非常常見的功能囱持,即一次登錄后,下次再來的話不用登錄了焕济。

注:Shiro 不會去維護用戶纷妆、維護權(quán)限;這些需要我們自己去設(shè)計/提供晴弃;然后通過相應(yīng)的接口注入給 Shiro 即可掩幢。

從外部看,Shiro 中對外交互的API如下:

  1. Subject:主體上鞠,代表了當前“用戶”际邻,這個用戶不一定是一個具體的人,與當前應(yīng)用交互的任何東西都是 Subject旗国,如網(wǎng)絡(luò)爬蟲枯怖,機器人等注整;即一個抽象概念能曾;所有 Subject 都綁定到 SecurityManager,與 Subject 的所有交互都會委托給 SecurityManager肿轨;可以把 Subject 認為是一個門面寿冕;SecurityManager 才是實際的執(zhí)行者;

  2. SecurityManager:安全管理器椒袍;即所有與安全有關(guān)的操作都會與 SecurityManager 交互驼唱;且它管理著所有 Subject;可以看出它是 Shiro 的核心驹暑,它負責(zé)與后邊介紹的其他組件進行交互玫恳,如果學(xué)習(xí)過 SpringMVC辨赐,你可以把它看成 DispatcherServlet 前端控制器;

  3. Realm:域京办,Shiro 從從 Realm 獲取安全數(shù)據(jù)(如用戶掀序、角色、權(quán)限)惭婿,就是說 SecurityManager要驗證用戶身份不恭,那么它需要從 Realm 獲取相應(yīng)的用戶進行比較以確定用戶身份是否合法;也需要從 Realm 得到用戶相應(yīng)的角色/權(quán)限進行驗證用戶是否能進行操作财饥;可以把 Realm 看成 DataSource换吧,即安全數(shù)據(jù)源。

從內(nèi)部看钥星,Shiro 中的架構(gòu)如下:

  1. Subject:主體沾瓦,可以看到主體可以是任何可以與應(yīng)用交互的“用戶”;

  2. SecurityManager : 相 當 于 SpringMVC 中 的 DispatcherServlet 或 者 Struts2 中 的 FilterDispatcher打颤;是 Shiro 的心臟暴拄;所有具體的交互都通過 SecurityManager 進行控制;它管理著所有 Subject编饺、且負責(zé)進行認證和授權(quán)乖篷、及會話、緩存的管理透且。

  3. Authenticator:認證器撕蔼,負責(zé)主體認證的,這是一個擴展點秽誊,如果用戶覺得 Shiro 默認的不好鲸沮,可以自定義實現(xiàn);其需要認證策略(Authentication Strategy)锅论,即什么情況下算用戶認證通過了讼溺;

  4. Authrizer:授權(quán)器,或者訪問控制器最易,用來決定主體是否有權(quán)限進行相應(yīng)的操作怒坯;即控制著用戶能訪問應(yīng)用中的哪些功能;

  5. Realm:可以有 1 個或多個 Realm藻懒,可以認為是安全實體數(shù)據(jù)源剔猿,即用于獲取安全實體的;可以是 JDBC 實現(xiàn)嬉荆,也可以是 LDAP 實現(xiàn)归敬,或者內(nèi)存實現(xiàn)等等;由用戶提供;注意:不知道你的用戶/權(quán)限存儲在哪及以何種格式存儲汪茧;所以我們一般在應(yīng)用中都需要實現(xiàn)自己的 Realm椅亚;

  6. SessionManager:如果寫過 Servlet 就應(yīng)該知道 Session 的概念,Session 呢需要有人去管理它的生命周期舱污,這個組件就是 SessionManager什往;而 Shiro 并不僅僅可以用在 Web 環(huán)境,也可以用在如普通的 JavaSE 環(huán)境慌闭、EJB 等環(huán)境别威;所有呢,Shiro 就抽象了一個自己的 Session來管理主體與應(yīng)用之間交互的數(shù)據(jù)驴剔;這樣的話省古,比如我們在 Web 環(huán)境用,剛開始是一臺Web 服務(wù)器丧失;接著又上了臺 EJB 服務(wù)器豺妓;這時想把兩臺服務(wù)器的會話數(shù)據(jù)放到一個地方,這個時候就可以實現(xiàn)自己的分布式會話(如把數(shù)據(jù)放到 Memcached 服務(wù)器)布讹;

  7. SessionDAO:DAO 大家都用過琳拭,數(shù)據(jù)訪問對象,用于會話的 CRUD描验,比如我們想把 Session保存到數(shù)據(jù)庫白嘁,那么可以實現(xiàn)自己的 SessionDAO,通過如 JDBC 寫到數(shù)據(jù)庫膘流;比如想把Session 放到 Memcached 中絮缅,可以實現(xiàn)自己的 Memcached SessionDAO;另外 SessionDAO中可以使用 Cache 進行緩存呼股,以提高性能耕魄;

  8. CacheManager:緩存控制器,來管理如用戶彭谁、角色吸奴、權(quán)限等的緩存的;因為這些數(shù)據(jù)基本
    上很少去改變缠局,放到緩存中后可以提高訪問的性能

  9. Cryptography:密碼模塊则奥,Shiro 提高了一些常見的加密組件用于如密碼加密/解密的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甩鳄,一起剝皮案震驚了整個濱河市逞度,隨后出現(xiàn)的幾起案子额划,更是在濱河造成了極大的恐慌妙啃,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揖赴,居然都是意外死亡馆匿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門燥滑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渐北,“玉大人,你說我怎么就攤上這事铭拧≡咧耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵搀菩,是天一觀的道長呕臂。 經(jīng)常有香客問我,道長肪跋,這世上最難降的妖魔是什么歧蒋? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮州既,結(jié)果婚禮上谜洽,老公的妹妹穿的比我還像新娘。我一直安慰自己吴叶,他們只是感情好阐虚,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚌卤,像睡著了一般敌呈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上造寝,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天磕洪,我揣著相機與錄音,去河邊找鬼诫龙。 笑死析显,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的签赃。 我是一名探鬼主播谷异,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锦聊!你這毒婦竟也來了歹嘹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤孔庭,失蹤者是張志新(化名)和其女友劉穎尺上,沒想到半個月后材蛛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡怎抛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年卑吭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片马绝。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡豆赏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出富稻,到底是詐尸還是另有隱情掷邦,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布椭赋,位于F島的核電站耙饰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纹份。R本人自食惡果不足惜苟跪,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔓涧。 院中可真熱鬧件已,春花似錦、人聲如沸元暴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茉盏。三九已至鉴未,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸠姨,已是汗流浹背铜秆。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讶迁,地道東北人连茧。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像巍糯,于是被迫代替她去往敵國和親啸驯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 現(xiàn)在在學(xué)習(xí)Shiro祟峦,參照著張開濤老師的博客進行學(xué)習(xí)罚斗,然后自己寫博客記錄一下學(xué)習(xí)中的知識點,一來可以加深理解...
    卑微幻想家閱讀 2,533評論 0 5
  • 目錄:Shiro學(xué)習(xí)總結(jié)(目錄貼) 1.1袱吆、Shiro是什么? Apache的強大并且靈活的開源安全框架搓幌。 簡潔的...
    41uLove閱讀 574評論 1 13
  • 簡介: Apache Shiro 是一個功能強大且易于使用的Java安全(權(quán)限)框架 Shiro 讓您可以快速輕松...
    好像身體被掏空閱讀 549評論 1 0
  • 看博主系列 開濤的博客 以下是學(xué)習(xí)筆記: Authentication:身份認證溉愁,驗證用戶是不是已經(jīng)擁有相應(yīng)的身份...
    cuteximi_1995閱讀 546評論 0 2
  • 秋風(fēng)入窗來,煞入細掩門饲趋。 誰知為何來拐揭,簾搖花燭滅。 冷夜愁聚焦奕塑,酒...
    子木輝閱讀 263評論 0 0