請(qǐng)花2分鐘閱讀和理解Shiro中的術(shù)語(yǔ) - 這是非常重要的。這里的術(shù)語(yǔ)和概念在文檔中的任何地方都被引用,并且將大大簡(jiǎn)化您對(duì)Shiro和一般的安全性的理解。
因?yàn)槭褂昧艘恍┠赡懿惶靼椎男g(shù)語(yǔ),所以安全可能真的令人很困惑。下面將通過(guò)一些核心概念來(lái)更容易地理解Shiro常用的知識(shí),在接下來(lái)的章節(jié)中會(huì)看到Shiro API如何反映它們:
權(quán)限
權(quán)限在Shiro中解釋?zhuān)核且粋€(gè)描述應(yīng)用程序中的原始功能的語(yǔ)句。 權(quán)限是安全策略中的最低級(jí)別構(gòu)造。 他們只定義了應(yīng)用程序可以做什么。不描述“誰(shuí)”能夠執(zhí)行的操作。 權(quán)限只是一個(gè)行為的聲明,沒(méi)有更多。
一些權(quán)限的示例:
/user/list‘網(wǎng)頁(yè)主體
主體是應(yīng)用程序用戶(hù)(主題)的任何標(biāo)識(shí)屬性。 “標(biāo)識(shí)屬性”可以是對(duì)您的應(yīng)用程序有意義的任何內(nèi)容 - 用戶(hù)名,姓氏,給定名稱(chēng),社會(huì)安全號(hào)碼,用戶(hù)ID等。Shiro還引用了稱(chēng)為主體的主要主體的東西。主要主體是在整個(gè)應(yīng)用程序中唯一標(biāo)識(shí)主題的任何主體。 理想的主要主體是用戶(hù)名或用戶(hù)ID,它是RDBMS用戶(hù)表主鍵。 應(yīng)用程序中的用戶(hù)(主題)只有一個(gè)主要主體。
領(lǐng)域
領(lǐng)域是可以訪問(wèn)特定于應(yīng)用程序的安全數(shù)據(jù)(如用戶(hù),角色和權(quán)限)的組件。 它可以被認(rèn)為是一個(gè)安全特定的DAO(數(shù)據(jù)訪問(wèn)對(duì)象)。 領(lǐng)域?qū)⑦@種特定于應(yīng)用程序的數(shù)據(jù)轉(zhuǎn)換為Shiro理解的格式,所以Shiro可以提供一個(gè)易于理解的主題編程API,無(wú)論存在多少數(shù)據(jù)源或應(yīng)用程序特定的數(shù)據(jù)。
領(lǐng)域通常與數(shù)據(jù)源(例如關(guān)系數(shù)據(jù)庫(kù),LDAP目錄,文件系統(tǒng)或其他類(lèi)似資源)具有1對(duì)1關(guān)聯(lián)。 因此,領(lǐng)域接口的實(shí)現(xiàn)使用數(shù)據(jù)源特定的API來(lái)發(fā)現(xiàn)。諸如JDBC,文件IO,Hibernate或JPA或任何其他數(shù)據(jù)訪問(wèn)API的授權(quán)數(shù)據(jù)(角色,權(quán)限等)。
角色
角色的定義可以根據(jù)您與誰(shuí)交談。 在許多應(yīng)用程序中,人們使用隱含地定義安全策略的模糊概念。 Shiro更喜歡將角色解釋為一個(gè)命名的權(quán)限集合。 這是一個(gè)應(yīng)用程序唯一名稱(chēng),聚合一個(gè)或多個(gè)權(quán)限聲明。
這是一個(gè)比許多應(yīng)用程序使用的隱式更具體的定義。 如果你選擇讓數(shù)據(jù)模型反映Shiro的假設(shè),你會(huì)發(fā)現(xiàn)將有更多的權(quán)力來(lái)控制安全策略。
會(huì)話
會(huì)話是在一段時(shí)間內(nèi)與軟件系統(tǒng)交互的單個(gè)用戶(hù)/主題相關(guān)聯(lián)的有狀態(tài)數(shù)據(jù)上下文。 在主題使用應(yīng)用程序時(shí),可以從會(huì)話中添加/讀取/刪除數(shù)據(jù),并且應(yīng)用程序可以稍后在必要時(shí)使用此數(shù)據(jù)。 當(dāng)用戶(hù)/主題注銷(xiāo)應(yīng)用程序或由于不活動(dòng)導(dǎo)致超時(shí)時(shí),會(huì)話將終止。
對(duì)于熟悉HttpSession的人來(lái)說(shuō),Shiro會(huì)話的目的也是一樣的,除了Shiro會(huì)話可以在任何環(huán)境中使用,即使沒(méi)有Servlet容器或EJB容器可用。
主題
主題只是一個(gè)奇特的安全術(shù)語(yǔ),基本上意味著應(yīng)用程序用戶(hù)的安全特定的“視圖”。 主體并不總是需要反映一個(gè)人,雖然 - 它可以表示一個(gè)外部進(jìn)程調(diào)用您的應(yīng)用程序,或者可能是一個(gè)守護(hù)進(jìn)程系統(tǒng)帳戶(hù)在一段時(shí)間間歇地執(zhí)行某些事情(如cron作業(yè))。 它基本上是與應(yīng)用程序做某事的任何實(shí)體的表示。