Shiro 簡介

image.png

Shiro是Apache的開源安全框架凄鼻,提供了登錄認證随橘,授權喂分,加密,會話管理机蔗,緩存管理等功能蒲祈。

核心概念

Shiro包含了如下三個核心概念:

  • Subject:主體,將用戶的概念理解為當前操作的主體萝嘁,可能是一個通過瀏覽器請求的用戶梆掸,也可能是其他的程序。Subject 代表了當前用戶的安全操作牙言,SecurityManager 則管理所有用戶的安全操作酸钦。
  • SecurityManager:安全管理器,管理著所有的Subject咱枉,是Shiro的核心卑硫,與其他組件交互,例如會話管理蚕断,緩存管理
  • Ream:意思為領域或者國度欢伏。起到一個橋梁的作用,主要通過realm來獲取用戶相關的安全數據亿乳,例如獲取用戶在數據庫中的密碼信息硝拧,角色信息,操作權限信息等葛假。Shiro內置了2個Realm障陶,分別是IniRealm和JdbcRealm,但是不常用聊训,一般情況下都需要我們自己來自定義實現抱究。

一般我們需要繼承 org.apache.shiro.realm.AuthorizingRealm,然后實現其中父類的2個抽象方法。

  // 自定義Realm
  public class CustomRealm extends AuthorizingRealm {

    // 授權魔眨,驗證用戶的角色和操作權限
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 
          //....
    }

    // 認證媳维,驗證登錄的用戶名和密碼是否正確
   @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
          //....
    }

  }

整體流程

用戶通過Subject來進行認證和授權,而Subject又委托給SecurityManager遏暴,而SecurityManager又需要通過我們自定義的Realm來獲取密碼侄刽,權限等數據來進行校驗和比對

image.png

過濾器

Shiro還提供了過濾器,可以配置我們的過濾規(guī)則朋凉,過濾規(guī)則對順序是有要求的州丹,短路優(yōu)先原則,也就是前面的適配成功之后,就不會再適配后面的規(guī)則了墓毒。

/user/**=anon
/user/list=authc 永遠不會執(zhí)行

過濾規(guī)則說明:
其中anon吓揪、authc等為Shiro為我們實現的過濾器,具體如下表所示:

Filter Name Class Description
anon org.apache.shiro.web.filter.authc.AnonymousFilter 匿名攔截器所计,即不需要登錄即可訪問柠辞;一般用于靜態(tài)資源過濾;示例/static/**=anon
authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter 基于表單的攔截器主胧;如/**=authc叭首,如果沒有登錄會跳到相應的登錄頁面登錄
authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter Basic HTTP身份驗證攔截器
logout org.apache.shiro.web.filter.authc.LogoutFilter 退出攔截器,主要屬性:redirectUrl:退出成功后重定向的地址(/)踪栋,示例/logout=logout
noSessionCreation org.apache.shiro.web.filter.session.NoSessionCreationFilter 不創(chuàng)建會話攔截器焙格,調用subject.getSession(false)不會有什么問題,但是如果subject.getSession(true)將拋出DisabledSessionException異常
perms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter 權限授權攔截器夷都,驗證用戶是否擁有所有權限眷唉;屬性和roles一樣;示例/user/**=perms["user:create"]
port org.apache.shiro.web.filter.authz.PortFilter 端口攔截器囤官,主要屬性port(80):可以通過的端口冬阳;示例/test= port[80],如果用戶訪問該頁面是非80治拿,將自動將請求端口改為80并重定向到該80端口摩泪,其他路徑/參數等都一樣
rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter rest風格攔截器,自動根據請求方法構建權限字符串劫谅;示例/users=rest[user],會自動拼出user:read,user:create,user:update,user:delete權限字符串進行權限匹配(所有都得匹配嚷掠,isPermittedAll)
roles org.apache.shiro.web.filter.authz.RolesAuthorizationFilter 角色授權攔截器捏检,驗證用戶是否擁有所有角色;示例/admin/**=roles[admin]
ssl org.apache.shiro.web.filter.authz.SslFilter SSL攔截器不皆,只有請求協(xié)議是https才能通過贯城;否則自動跳轉會https端口443;其他和port攔截器一樣霹娄;
user org.apache.shiro.web.filter.authc.UserFilter 用戶攔截器能犯,用戶已經身份驗證/記住我登錄的都可;示例/**=user

我們也可以自定義實現過濾器犬耻,如果是授權相關踩晶,則繼承org.apache.shiro.web.filter.authz.AuthorizationFilter,如果是認證則繼承AuthenticatingFilter

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末渡蜻,一起剝皮案震驚了整個濱河市茸苇,隨后出現的幾起案子,更是在濱河造成了極大的恐慌学密,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異西壮,居然都是意外死亡,警方通過查閱死者的電腦和手機做修,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門饰及,熙熙樓的掌柜王于貴愁眉苦臉地迎上來康震,“玉大人,你說我怎么就攤上這事屏箍¢俪溃” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵颖御,是天一觀的道長凝颇。 經常有香客問我潘拱,道長拧略,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任盔腔,我火速辦了婚禮,結果婚禮上弛随,老公的妹妹穿的比我還像新娘。我一直安慰自己舀透,他們只是感情好愕够,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布惑芭。 她就那樣靜靜地躺著,像睡著了一般逃沿。 火紅的嫁衣襯著肌膚如雪幻锁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天假消,我揣著相機與錄音富拗,去河邊找鬼鸣戴。 笑死,一個胖子當著我的面吹牛葵擎,可吹牛的內容都是我干的半哟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寓涨,長吁一口氣:“原來是場噩夢啊……” “哼盯串!你這毒婦竟也來了?” 一聲冷哼從身側響起戒良,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后几缭,有當地人在樹林里發(fā)現了一具尸體河泳,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡年栓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年拆挥,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某抓。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖否副,靈堂內的尸體忽然破棺而出汉矿,到底是詐尸還是另有隱情,我是刑警寧澤备禀,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布洲拇,位于F島的核電站,受9級特大地震影響痹届,放射性物質發(fā)生泄漏。R本人自食惡果不足惜队腐,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一蚕捉、第九天 我趴在偏房一處隱蔽的房頂上張望迫淹。 院中可真熱鬧为严,春花似錦应民、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稚矿,卻和暖如春庸诱,著一層夾襖步出監(jiān)牢的瞬間捻浦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工桥爽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朱灿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓聚谁,卻偏偏與公主長得像母剥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子形导,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 前言 現在在學習Shiro环疼,參照著張開濤老師的博客進行學習,然后自己寫博客記錄一下學習中的知識點朵耕,一來可以加深理解...
    卑微幻想家閱讀 2,526評論 0 5
  • 目錄:Shiro學習總結(目錄貼) 1.1阎曹、Shiro是什么伪阶? Apache的強大并且靈活的開源安全框架。 簡潔的...
    41uLove閱讀 574評論 1 13
  • 簡介: Apache Shiro 是一個功能強大且易于使用的Java安全(權限)框架 Shiro 讓您可以快速輕松...
    好像身體被掏空閱讀 549評論 1 0
  • 說明:本文很多觀點和內容來自互聯(lián)網以及各種資料,如果侵犯了您的權益熏迹,請及時聯(lián)系我檐薯,我會刪除相關內容。 權限管理 基...
    寇寇寇先森閱讀 7,593評論 8 76
  • 1.當給父親電話說注暗,臨時有事國慶回不來了時坛缕,父親一直問出了什么事?是老公那邊出事了嗎?我說,是我工作上臨時有點事捆昏,...
    公子瑜閱讀 184評論 0 0