1. 程式人生 > 其它 >Shiro簡介

Shiro簡介

學習shiro之前,需要先了解RBAC許可權模型,關於該模型的介紹,可以參考 SHUWOOM的部落格 RBAC許可權系統分析、設計與實現

Apache Shiro簡介

Apache Shiro 是一個強大而靈活的開源安全框架,可以方便地處理身份驗證、授權、企業會話管理和加密。

Apache Shiro主要可以做如下的一些操作:

1、對使用者進行身份驗證以驗證其身份
2、對使用者執行訪問控制,如 確定是否為使用者分配了特定的角色,確定是否允許使用者做某事
3、在任何環境中使用會話 API,即使沒有 Web 或 EJB 容器。
4、在身份驗證、訪問控制或會話生命週期期間對事件做出反應。
5、啟用單點登入 (SSO) 功能
6、無需登入即可為使用者關聯啟用“記住我”服務
等等

Shiro架構

​ 從最簡化的架構來看,shiro的架構如下圖,主要包括 appliation ode,Subject,SecurityManager和Realms四個概念,其中Apllication Code可以認為外部系統

Subject:請求主體。比如登入使用者,比如一個被授權的app。在程式中任何地方都可以通過SecurityUtils.getSubject()獲取到當前的subject。subject中可以獲取到Principal,這個是subject的標識,比如登陸使用者的使用者名稱或者id等, shiro不對值做限制。但是在登入和授權過程中,程式需要通過principal來識別唯一的使用者。

SecurityManager:安全管理器,可以理解成控制中心,所有請求最終基本上都通過它來代理轉發,即所有與安全有關的操作都會與SecurityManager互動;且它管理著所有Subject;可以看出它是Shiro的核心,它負責與後邊介紹的其他元件進行互動

Realm:realm可以訪問安全相關資料,提供統一的資料封裝來給上層做資料校驗。shiro的建議是每種資料來源定義一個realm,比如使用者資料存在資料庫可以使用JdbcRealm;存在屬性配置檔案可以使用PropertiesRealm。一般我們使用shiro都使用自定義的realm。 當有多個realm存在的時候,shiro在做使用者校驗的時候會按照定義的策略來決定認證是否通過,shiro提供的可選策略有一個成功或者所有都成功等。

詳細架構

Subject,SeurityManager,Realm上面已經進行了介紹,下面主要介紹下面幾個概念

Authenticator:認證器,主要負責主體的認證,如使用者名稱與密碼

Authrizer:授權器,或者訪問控制器,用來決定主體是否有許可權進行相應的操作;即控制著使用者能訪問應用中的哪些功能;

SessionManager:用來對web應用環境下的session進行管理

SessionDAO:用來對Session進行增刪改查的操作,類似mybatis中的mapper

CacheManager:快取控制器,來管理如使用者、角色、許可權等的快取的;因為這些資料基本上很少去改變,放到快取中後可以提高訪問的效能

參考:

RBAC許可權系統分析、設計與實現

shiro官方文件

跟我學shiro