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