Shiro 實戰(二)-授權
1 簡介
授權,也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯資料/頁面操作等)
在授權中需瞭解的幾個關鍵物件:主體(Subject)、資源(Resource)、許可權(Permission)、角色(Role)
1.1 主體
即訪問應用的使用者,在Shiro中使用Subject代表使用者
使用者只有授權後才允許訪問相應的資源
1.2 資源
在應用中使用者可以訪問的任何東西,比如訪問JSP頁面、檢視/編輯某些資料、訪問某個業務方法、列印文字等等都是資源
使用者只有授權後才能訪問
1.3 許可權
安全策略中的原子授權單位,通過許可權我們可以表示在應用中使用者有沒有操作某個資源的權力。即許可權表示在應用中使用者能不能訪問某個資源,如:
- 訪問使用者列表頁面
- 檢視/新增/修改/刪除使用者資料(即很多時候都是CRUD(增查改刪)式許可權控制)
- 列印文件等
許可權代表了使用者有沒有操作某個資源的權利,即反映在某個資源上的操作允不允許,不反映誰去執行這個操作
所以後續還需要把許可權賦予特定使用者
,即定義哪個使用者允許在某個資源上做什麼操作(許可權),Shiro不會去做這件事情,而是由實現人員提供
Shiro支援粗粒度許可權(如使用者模組的所有許可權)和細粒度許可權(操作某個使用者的許可權,即例項級別的)
1.4 角色
賦予使用者角色而不是許可權
這樣使用者可以擁有一組許可權,賦予許可權時比較方便
典型的如:PM、CTO、SE等都是角色,不同的角色擁有一組不同的許可權
1.4.1 隱式角色
直接通過角色來驗證使用者有沒有操作許可權
如在應用中CTO、SE可以使用印表機,假設某天不允許SE使用印表機,此時需要從應用中刪除相應程式碼
即粒度是以角色為單位進行訪問控制的,粒度較粗
如果進行修改可能造成多處程式碼修改。
1.4.2 顯示角色
在程式中通過許可權控制誰能訪問某個資源,角色聚合一組許可權集合
這樣假設哪個角色不能訪問某個資源,只需要從角色代表的許可權集合中移除即可
無須修改多處程式碼;即粒度是以資源/例項為單位的;粒度較細