轻量又高效,Apache Shiro 你值得拥有!
Apache Shiro 是一個強大且易用的 Java 安全框架,能夠讓開發(fā)者以非常清晰的方式處理身份認證、授權(quán)、會話管理以及密碼加密。使用其易于理解的 API,開發(fā)者可以輕松,高效的為任何應(yīng)用程序,從最小的移動應(yīng)用程序到大型的網(wǎng)絡(luò)和企業(yè)應(yīng)用程序添加安全管理功能。
什么是 Shiro
Apache Shiro 是一個使用 Java 開發(fā)的,易于使用,功能強大且靈活的開源安全框架,它為開發(fā)人員提供了直觀簡潔的 API 來支持應(yīng)用程序中的四個安全性基石:
- 身份驗證(Authentication)
- 授權(quán)(Authorization)
- 會話管理(Session Management)
- 加密(Cryptography)
Shiro 提供了許多重要且實用的安全性相關(guān)的功能,其中被關(guān)注得最多的是身份驗證和授權(quán)功能,這兩者也是一個安全框架的核心功能,我們的課程將會把重心放在這兩個部分,對于其它部分只進行簡單的介紹。
想象有如下的動態(tài)安全模型:
管理員可以為應(yīng)用系統(tǒng)創(chuàng)建不同的角色,角色可以綁定一組權(quán)限,之后管理員可以為不同用戶分配一個或多個角色,并在應(yīng)用正常提供服務(wù)期間在后臺管理網(wǎng)頁中隨時更改所有這些功能。
通過使用 Shiro,我們將能夠很容易的實現(xiàn)上述功能。
Shiro 框架的體系結(jié)構(gòu)
Shiro 的設(shè)計目標是通過直觀且易于使用的 API 來簡化應(yīng)用程序安全性相關(guān)代碼的設(shè)計,應(yīng)用程序安全控制功能的實現(xiàn)往往有著不同的需求場景,Shiro 的核心設(shè)計參考了這些用戶在大多數(shù)情況下都會遇到的需求場景,在這些情況下來考慮 Shiro 的安全性設(shè)計。
在 Shiro 框架的最上層,主要有 3 個關(guān)鍵組件相互協(xié)作:
Subject
正如上面提到的那樣,Subject 本質(zhì)上是系統(tǒng)用戶的一個特定安全 “視圖”,可以表示會與應(yīng)用程序交互的任何東西。
Subject 實例都強制綁定到 SecurityManager 上,當(dāng)我們調(diào)用 Subject 的方法時,具體的操作最終都會轉(zhuǎn)交給相關(guān)的 SecurityManager 進行處理。
SecurityManager
SecurityManager 是 Shiro 體系結(jié)構(gòu)的核心,它協(xié)調(diào)著內(nèi)部的其它安全組件,這些安全組件一起形成一種互相協(xié)作支持的關(guān)系,共同完成 Shiro 提供的所有功能。對于開發(fā)人員而言,一旦為應(yīng)用程序配置了 SecurityManager,通常就不需要再理會它,我們只需要和 Subject 的 API 進行交互就可以了,這在上面的流程圖中也有清晰的體現(xiàn)。
Realm
Realm 是 Shiro 與應(yīng)用程序數(shù)據(jù)之間交換的“橋梁”,當(dāng) Shiro 真正需要與安全性相關(guān)的數(shù)據(jù)(例如用戶帳戶,用戶角色,權(quán)限等)進行交互以執(zhí)行身份驗證和授權(quán)時,Shiro 會從一個或多個為應(yīng)用程序配置的 Realm 中查找這些數(shù)據(jù)。
可以簡單地把 Realm 理解為特定于安全性的 DAO,它封裝了對安全性相關(guān)數(shù)據(jù)的訪問,在配置 Shiro 時,我們必須至少指定一個 Realm 以用于身份驗證(或授權(quán))。
詳細架構(gòu)
下圖展示了 Shiro 的核心體系結(jié)構(gòu):
上圖是一個更加具體的 Shiro 詳細架構(gòu)圖,圖中清晰地描述了 Subject,Security Manager 和 Realm 三者各自在整個 Shiro 框架中所扮演的角色,以及擔(dān)負的職責(zé)。
為了簡化配置和實現(xiàn)靈活的可配置性(可插拔性),Shiro 的實現(xiàn)都是高度模塊化的,高度模塊化使得 SecurityManager 的實現(xiàn)實際上并沒有做實質(zhì)性的事情。相反,SecurityManager 的作用是作為一個輕量級的“容器”組件,將幾乎所有的行為委托給封裝在內(nèi)部的其它組件,這是“包裝器”設(shè)計模式的一種使用。
下面對身份認證器(Authenticator)和訪問控制器(Authorizer)進行簡單說明。
身份認證器(Authenticator)是負責(zé)執(zhí)行和響應(yīng)用戶認證(登錄)的組件。當(dāng)用戶嘗試登錄時,該邏輯由 Authenticator 執(zhí)行,Authenticator 知道如何與一個或多個 Realm 進行協(xié)調(diào),從這些 Realm 中獲取用戶的身份信息,然后完成身份認證過程。
訪問控制器(Authorizer)是負責(zé)決定用戶對應(yīng)用中具體資源能否訪問和操作的組件,是最終決定用戶是否被允許做某事的機制,與 Authenticator 一樣,Authorizer 也知道如何與多個 Realm 協(xié)調(diào),以獲取角色和權(quán)限信息,Authorizer 使用這些信息來確定用戶是否被允許執(zhí)行某個動作。
以上內(nèi)容來自實驗樓新課《Shiro 與 Spring Boot 實現(xiàn)權(quán)限管理系統(tǒng)》,課程后續(xù)還有:
該門課程將會以理論學(xué)習(xí)與實戰(zhàn)相結(jié)合的方式分別對 Shiro 的身份認證和授權(quán)這兩個最重要的安全功能著重進行學(xué)習(xí)。下面的截圖展示了實戰(zhàn)學(xué)習(xí)中,開發(fā)完成后角色管理的部分接口:
總結(jié)
以上是生活随笔為你收集整理的轻量又高效,Apache Shiro 你值得拥有!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再高深的 Python 面试难题,这门课
- 下一篇: AWS Lambda 开发企业微信消息机