淺談shiro

本篇文章主要是對權(quán)限框架shiro的一個小總結(jié)。寫的不對的地方或者哪里需要修改的歡迎大家給出意見拇厢。

shiro是什么

? ? ? Apache Shiro是一個強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗證、授權(quán)杭煎、密碼學(xué)和會話管理纽哥。使用Shiro的易于理解的API,您可以快速、輕松地獲得任何應(yīng)用程序,從最小的移動應(yīng)用程序到最大的網(wǎng)絡(luò)和企業(yè)應(yīng)用程序代箭。

主要功能

三個核心組件:Subject, SecurityManager 和 Realms.

Subject:即“當(dāng)前操作用戶”墩划。但是,在Shiro中嗡综,Subject這一概念并不僅僅指人乙帮,也可以是第三方進(jìn)程、后臺帳戶(Daemon Account)或其他類似事物极景。它僅僅意味著“當(dāng)前跟軟件交互的東西”察净。但考慮到大多數(shù)目的和用途,你可以把它認(rèn)為是Shiro的“用戶”概念盼樟。

Subject代表了當(dāng)前用戶的安全操作氢卡,SecurityManager則管理所有用戶的安全操作。

SecurityManager:它是Shiro框架的核心恤批,典型的Facade模式废赞,Shiro通過SecurityManager來管理內(nèi)部組件實例鉴吹,并通過它來提供安全管理的各種服務(wù)打颤。

Realm: Realm充當(dāng)了Shiro與應(yīng)用安全數(shù)據(jù)間的“橋梁”或者“連接器”错妖。也就是說,當(dāng)對用戶執(zhí)行認(rèn)證(登錄)和授權(quán)(訪問控制)驗證時纯蛾,Shiro會從應(yīng)用配置的Realm中查找用戶及其權(quán)限信息。

從這個意義上講,Realm實質(zhì)上是一個安全相關(guān)的DAO:它封裝了數(shù)據(jù)源的連接細(xì)節(jié)睛竣,并在需要時將相關(guān)數(shù)據(jù)提供給Shiro。當(dāng)配置Shiro時求摇,你必須至少指定一個Realm射沟,用于認(rèn)證和(或)授權(quán)。配置多個Realm是可以的与境,但是至少需要一個验夯。

Shiro內(nèi)置了可以連接大量安全數(shù)據(jù)源(又名目錄)的Realm,如LDAP摔刁、關(guān)系數(shù)據(jù)庫(JDBC)挥转、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求共屈,你還可以插入代表自定義數(shù)據(jù)源的自己的Realm實現(xiàn)绑谣。


shiro 的執(zhí)行圖

為什么要使用shiro?

? ???shiro 的安全拗引,圍繞著 2點來借宵, ?1 是 角色 2是權(quán)限

? ? ?我們通常是角色對應(yīng)一組權(quán)限,他這邊不是的矾削。

? ? ? 我們系統(tǒng)中角色不是固定的壤玫,但是權(quán)限是固定的,比如 ? ?角色允許動態(tài)去創(chuàng)建怔软,因此我們只可以拿權(quán)限來判斷

? ? ? ?比如 ?useraction ?里面的add 方法 ?我可以通過 ?一個注解 ?參數(shù)為 user:add 代表 ?shiro ?維護(hù)的當(dāng)前請求用戶的 這個人只要有?user:add ?就可以了垦细。

? ? ? ?比如 ?useraction 里面有一個 findbean (獲取一個bean的信息) ? 又有一個listdata(獲取列表數(shù)據(jù)) ?他們都是查看權(quán)限 ?他們的注解加入同一個 user:see 就可以了

? ? ? 如果用傳統(tǒng)的url攔截我們需要給 findbean 和 listdata 各配置一個url權(quán)限(他們是不同的url),很顯然用shiro ?去做這件事更方便一些挡逼。

? ? ? 另外括改,比較好的就是shiro ? 自帶了前臺的標(biāo)簽

? ? ? 我們在列表頁面 ? 的添加按鈕,動態(tài)判斷是否有 user:add 這個權(quán)限家坎,如果有才給他顯示嘱能, ? 不用shiro ? 我們需要自己寫一個標(biāo)簽,現(xiàn)在shiro ? 自帶標(biāo)簽虱疏。

shiro的簡單demo

? ?工具說明: 這里樓主使用的開發(fā)工具是IntelliJ IDEA惹骂,jdk用的1.8

? ? 代碼說明:

? ? ? ? 首先加入shiro的依賴包。樓主使用的maven來進(jìn)行管理


shiro的相關(guān)jar包

添加shiro的XML 配置


shiro的xml配置

若果是web項目做瞪,還需要在web.xml文件中配置shiro的filter对粪。


shiroFilter

自己可以重寫relam類右冻,定義自己的權(quán)限規(guī)范,這里也相當(dāng)于是shiro使用的一個重點著拭。繼承?org.apache.shiro.realm.AuthorizingRealm;這個類纱扭。并且重寫其中的doGetAuthorizationInfo以及doGetAuthenticationInfo方法。第一個方法是對用戶授權(quán)儡遮,第二個方法是對用戶進(jìn)行認(rèn)證乳蛾。

shiro的驗證原理分析:shiro 登錄驗證的時候會封裝一個subject。然后我們可以通過這個subject 的用戶名或者其他標(biāo)致來查詢是否擁有這個用戶鄙币,如果沒有的話會拋出一個??? org.apache.shiro.authc.UnknownAccountException 肃叶。然后通過這個用戶名或者其他標(biāo)志從數(shù)據(jù)庫查出來的實體類做比較。如果符合則返回一個AuthenticationInfo十嘿。沒有驗證成功則拋出一系列異常因惭。

?異常總結(jié):

<-- 身份認(rèn)證異常?-->?

<--身份令牌異常详幽,不支持的身份令牌-->

org.apache.shiro.authc.pam.UnsupportedTokenException ?

<--?未知賬戶/沒找到帳號,登錄失敗-->

org.apache.shiro.authc.UnknownAccountException ?

<--帳號鎖定-->

org.apache.shiro.authc.LockedAccountException ?

<--用戶禁用-->

org.apache.shiro.authc.DisabledAccountException ?

<--登錄重試次數(shù)筛欢,超限浸锨。只允許在一段時間內(nèi)允許有一定數(shù)量的認(rèn)證嘗試-->

org.apache.shiro.authc.ExcessiveAttemptsException ?

<--一個用戶多次登錄異常:不允許多次登錄唇聘,只能登錄一次?。即不允許多處登錄--->

org.apache.shiro.authc.ConcurrentAccessException ?

<--?賬戶異常-->

org.apache.shiro.authc.AccountException ?

<--過期的憑據(jù)異常-->

org.apache.shiro.authc.ExpiredCredentialsException ?

<---?錯誤的憑據(jù)異常 -->

org.apache.shiro.authc.IncorrectCredentialsException ?

<--憑據(jù)異常-->

org.apache.shiro.authc.CredentialsException ?

org.apache.shiro.authc.AuthenticationException ?

<--權(quán)限異常-->

<--沒有訪問權(quán)限柱搜,訪問異常?-->

org.apache.shiro.authz.HostUnauthorizedException ?

org.apache.shiro.authz.UnauthorizedException ?

? <--?授權(quán)異常?-->??

org.apache.shiro.authz.UnauthenticatedException ?

org.apache.shiro.authz.AuthorizationException ?

<--?shiro全局異常?-->??

org.apache.shiro.ShiroException


shiro的授權(quán)分析:shiro的授權(quán)主要是利用角色和權(quán)限信息來控制用戶的權(quán)限迟郎,通過每一個角色的不同來確定對應(yīng)的權(quán)限〈险海可以配置多個數(shù)據(jù)源relam來處理權(quán)限宪肖;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市健爬,隨后出現(xiàn)的幾起案子控乾,更是在濱河造成了極大的恐慌,老刑警劉巖娜遵,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕衡,死亡現(xiàn)場離奇詭異,居然都是意外死亡设拟,警方通過查閱死者的電腦和手機(jī)慨仿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纳胧,“玉大人镰吆,你說我怎么就攤上這事∨苣剑” “怎么了万皿?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我牢硅,道長慰于,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任唤衫,我火速辦了婚禮婆赠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佳励。我一直安慰自己休里,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布赃承。 她就那樣靜靜地躺著妙黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞧剖。 梳的紋絲不亂的頭發(fā)上拭嫁,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音抓于,去河邊找鬼做粤。 笑死,一個胖子當(dāng)著我的面吹牛捉撮,可吹牛的內(nèi)容都是我干的怕品。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼巾遭,長吁一口氣:“原來是場噩夢啊……” “哼肉康!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灼舍,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤吼和,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骑素,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炫乓,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年砂豌,在試婚紗的時候發(fā)現(xiàn)自己被綠了厢岂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡阳距,死狀恐怖塔粒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筐摘,我是刑警寧澤卒茬,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布船老,位于F島的核電站,受9級特大地震影響圃酵,放射性物質(zhì)發(fā)生泄漏柳畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一郭赐、第九天 我趴在偏房一處隱蔽的房頂上張望薪韩。 院中可真熱鬧,春花似錦捌锭、人聲如沸俘陷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉盾。三九已至,卻和暖如春豁状,著一層夾襖步出監(jiān)牢的瞬間捉偏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工泻红, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留夭禽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓承桥,卻偏偏與公主長得像驻粟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凶异,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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