1 .Apache Shiro是什么?
Apache Shiro是一個功能強(qiáng)大且靈活的開放源代碼安全框架,可以干凈地處理認(rèn)證、授權(quán)、企業(yè)會話管理和加密。
Apache Shiro的首要目標(biāo)是易于使用和理解。有時候,安全性可能非常復(fù)雜,甚至很痛苦,但并不必一定如此。框架應(yīng)該盡可能地掩蓋復(fù)雜性,并公開一個干凈而直觀的API,以簡化開發(fā)人員確保其應(yīng)用程序安全的努力。
這里是一些可以用ApacheShiro處理的事情:
?認(rèn)證用戶以驗證其身份
?為用戶執(zhí)行訪問控制,例如:
?? -確定用戶是否被分配了某個安全角色
?? -確定用戶是否被允許執(zhí)行某項操作
?在任意環(huán)境中使用Session
API,即使沒有Web或EJB容器。
?在認(rèn)證、訪問控制或會話生命周期中響應(yīng)事件。
?聚集用戶安全數(shù)據(jù)的一個或多個數(shù)據(jù)源,并將其作為單個復(fù)合用戶"視圖"呈現(xiàn)。
?啟用單點(diǎn)登錄(SSO)功能
?無需登錄即可為用戶關(guān)聯(lián)啟用"記住我"服務(wù)
...
?以及更多 - 全部集成到一個內(nèi)聚易用API中。
Shiro試圖為所有應(yīng)用程序環(huán)境實現(xiàn)這些目標(biāo) - 從最簡單的命令行應(yīng)用程序到最大的企業(yè)應(yīng)用程序,而不強(qiáng)制依賴于其他第三方框架、容器或應(yīng)用程序服務(wù)器。當(dāng)然,該項目旨在盡可能融入這些環(huán)境中,而且能在任何環(huán)境中“開箱即用”。
2 Apache Shiro特性
Apache Shiro是一個具有許多特性的綜合應(yīng)用程序安全框架。下圖顯示了Shiro集中精力的地方,與本參考手冊的組織方式相似:

Shiro的目標(biāo)是Shiro開發(fā)團(tuán)隊稱之為"應(yīng)用程序安全的四大基石" - 認(rèn)證,授權(quán),會話管理和加密:
?身份認(rèn)證(Authentication):有時稱為"登錄",這是證明用戶的行為是他們自稱的人。
?訪問授權(quán)(Authorization):訪問控制的過程,即確定"誰"訪問"什么"。
?會話管理(Session
Management):即使在非Web或EJB應(yīng)用程序中,也可以管理用戶特定的會話。
?加密(Cryptography):使用加密算法確保數(shù)據(jù)安全,同時易于使用。
還有其他功能可以在不同的應(yīng)用環(huán)境中支持和強(qiáng)化這些問題,特別是:
?Web支持:Shiro的Web支持API可幫助輕松保護(hù)Web應(yīng)用程序安全。
?緩存(Caching):緩存是Apache
Shiro API中的第一級公民,可確保安全操作快速高效。
?并發(fā)性:Apache
Shiro支持具有并發(fā)功能的多線程應(yīng)用程序。
?測試:測試支持的存在,幫助您編寫單元測試和集成測試,并確保您的代碼按預(yù)期得到保護(hù)。
?"運(yùn)行方式":允許用戶假設(shè)其他用戶身份(如果允許)的功能,有時在管理方案中很有用。
?"記住我":在跨會話中記住用戶的身份,以便在強(qiáng)制時只需登錄即可。
3.Apache Shiro術(shù)語
請花2分鐘時間閱讀并理解這一點(diǎn)- 這非常重要。真的。這里的術(shù)語和概念在文檔中隨處可見,它將大大簡化您對Shiro和一般安全性的理解。
由于術(shù)語的使用,安全性可能非常困惑人。通過闡明一些核心概念,我們將使生活更輕松,并且您會看到Shiro API是多么好的體現(xiàn)它們的
?身份驗證(-Authentication,認(rèn)證)
認(rèn)證是驗證主體身份的過程- 從本質(zhì)上證明某人確實是他們所說的人。當(dāng)認(rèn)證嘗試成功時,應(yīng)用程序可以相信該主體保證是應(yīng)用程序所期望的。
?授權(quán)(Authorization)
授權(quán)也稱為訪問控制,是確定用戶/主體是否被允許執(zhí)行某些操作的過程。通常通過檢查和解釋主體的角色和權(quán)限(見下文),然后允許或拒絕訪問所請求的資源或功能來完成。
?密碼(Cipher)
密碼是用于執(zhí)行加密或解密的算法。該算法通常依賴于稱為密鑰的信息。并且加密因密鑰而異,所以如果沒有它,解密是非常困難的。
密碼有不同的變化。分組密碼對通常具有固定大小的符號塊進(jìn)行處理,而流密碼對連續(xù)的符號流進(jìn)行處理。對稱密碼使用相同的密鑰進(jìn)行加密和解密,而非對稱密碼使用不同的密鑰。如果不對稱密碼中的密鑰不能從其他密鑰中派生出來,則可以公開共享創(chuàng)建的公鑰/私鑰對。
?憑證(Credential)
憑證是驗證用戶/主體身份的一條信息。在驗證嘗試期間,一個(或多個)憑證與委托人一起提交,以驗證提交它們的用戶/主題實際上是關(guān)聯(lián)用戶。憑證通常是非常秘密的事物,只有特定的用戶/主體會知道,例如密碼或PGP密鑰或生物特征屬性或類似的機(jī)制。
這理念是,對于委托人而言,只有一個人會知道與該委托人"配對"的正確憑證。如果當(dāng)前用戶/主題提供與存儲在系統(tǒng)中的正確憑證匹配的正確憑證,則系統(tǒng)可以假設(shè)并相信當(dāng)前用戶/主題真的是他們所說的那個人。隨著更安全的憑證類型(例如生物特征簽名>密碼),信任程度會增加。
密碼學(xué)是通過隱藏信息或?qū)⑵滢D(zhuǎn)化為無意義的方式來保護(hù)信息免受不當(dāng)訪問的做法,因此沒有其他人可以閱讀。? Shiro專注于加密技術(shù)的兩個核心元素:使用公鑰或私鑰對電子郵件等數(shù)據(jù)進(jìn)行加密的密碼,以及對密碼等數(shù)據(jù)進(jìn)行不可逆加密的哈希散列(又名消息摘要)。
?哈希(Hash)
散列函數(shù)是輸入源(有時稱為消息)的單向,不可逆轉(zhuǎn)換,它被編碼為散列值,有時也稱為消息摘要。它通常用于密碼、數(shù)字指紋或帶有底層字節(jié)數(shù)組的數(shù)據(jù)。
?權(quán)限(Permission)
權(quán)限,至少在Shiro的解釋下,是一種描述應(yīng)用程序中原始功能的聲明,僅此而已。權(quán)限是安全策略中的最低級別構(gòu)造。他們只定義"應(yīng)用程序可以做什么"。他們沒有描述"誰"能夠執(zhí)行這些行動。權(quán)限僅僅是一種行為陳述,僅此而已。
權(quán)限的一些示例:
? -打開一個文件
? -查看'/ user /
list'網(wǎng)頁
? -打印文件
? -刪除'jsmith'用戶等等
?主題(Principal)
主題是應(yīng)用程序用戶(主體)的任何標(biāo)識屬性。? "標(biāo)識屬性"可以是對您的應(yīng)用程序有意義的任何內(nèi)容 - 用戶名,姓,特定名稱,社會安全號碼,用戶ID等等。就是這樣 - 沒有什么瘋狂的。
Shiro還引用了我們稱之為主體的首要的東西。首要的主題是在整個應(yīng)用程序中唯一標(biāo)識主體的任何主題。理想的主題原則是像用戶名或用戶標(biāo)識這樣的東西,它是一個RDBMS用戶表主鍵。在應(yīng)用程序中,用戶(主體)只有一個主要的主題。
?領(lǐng)域(Realm)
Realm是一個可以訪問特定應(yīng)用程序的安全數(shù)據(jù)(例如用戶、角色和權(quán)限)的組件。它可以被認(rèn)為是特定安全性的DAO(數(shù)據(jù)訪問對象)。? Realm將這些特定于應(yīng)用程序的數(shù)據(jù)轉(zhuǎn)換為Shiro可以理解的格式,因此無論存在多少數(shù)據(jù)源或數(shù)據(jù)如何針對特定應(yīng)用程序,Shiro都可以提供單一易于理解的Subject編程API。
Realm通常與數(shù)據(jù)源(如關(guān)系數(shù)據(jù)庫,LDAP目錄,文件系統(tǒng)或其他類似資源)具有1對1關(guān)聯(lián)。因此,Realm接口的實現(xiàn)使用特定于數(shù)據(jù)源的API來發(fā)現(xiàn)授權(quán)數(shù)據(jù)(角色,權(quán)限等),例如JDBC、文件IO、Hibernate或JPA或任何其他數(shù)據(jù)訪問API。
?角色(Role)
角色的定義可能因您與誰交談而有所不同。在許多應(yīng)用程序中,人們用隱式定義安全策略至多是個模糊的概念。? Shiro傾向于將角色解釋為權(quán)限的命名集合。這就這樣——一個應(yīng)用程序唯一名稱,它聚集了一個或多個Permission聲明。
這是比許多應(yīng)用程序使用的隱式定義更具體的定義。如果你選擇讓你的數(shù)據(jù)模型反映Shiro的假設(shè),你會發(fā)現(xiàn)你將在控制安全策略方面擁有更多的權(quán)力。
?會話(Session)
會話是一個有狀態(tài)的數(shù)據(jù)上下文,隨單個用戶/主體在一段時間內(nèi)與軟件系統(tǒng)進(jìn)行交互。在主體使用應(yīng)用程序時,可以從Session中添加/讀取/刪除數(shù)據(jù),并且應(yīng)用程序可以稍后在必要時使用此數(shù)據(jù)。會話在用戶/主體退出應(yīng)用程序或由于不活動而超時時終止。
對于那些熟悉HttpSession的人來說,一個Shiro會話可以達(dá)到同樣的目的,但Shiro會話可以在任何環(huán)境中使用,即使沒有可用的Servlet容器或EJB容器。
?主體(Subject)
主體只是一個奇特的安全術(shù)語,基本上意味著應(yīng)用程序用戶的特定于安全性的"視圖"。 然而,主體并不總是需要反映人類 - 它可以表示調(diào)用應(yīng)用程序的外部進(jìn)程,也可以表示在一段時間內(nèi)間歇性執(zhí)行某些事情的守護(hù)進(jìn)程系統(tǒng)帳戶(例如cron作業(yè))。 它基本上是對應(yīng)用程序做任何事情的任何實體的表示。——或者理解為程序的交互對象,包括而不限于用戶。
敬請期待,下一篇將講解創(chuàng)建第一個Shiro應(yīng)用。
碼字很辛苦,請如對你起到幫助,那就贊個賞唄~^_^