什麼是shiro 3——組件之授權

授權,也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯數據/頁面操作
等)。在授權中需瞭解的幾個關鍵對象:主體(Subject)、資源(Resource)、權限(Permission)、角色(Role)。
主體
主體,即訪問應用的用戶,在Shiro中使用Subject代表該用戶。用戶只有授權後才允許訪
問相應的資源。
資源
在應用中用戶可以訪問的任何東西,比如訪問JSP 頁面、查看/編輯某些數據、訪問某個業
務方法、打印文本等等都是資源。用戶只要授權後才能訪問。
權限
安全策略中的原子授權單位,通過權限我們可以表示在應用中用戶有沒有操作某個資源的
權力。即權限表示在應用中用戶能不能訪問某個資源,如:
訪問用戶列表頁面
查看/新增/修改/刪除用戶數據(即很多時候都是CRUD(增查改刪)式權限控制)
打印文檔等等。。。
如上可以看出,權限代表了用戶有沒有操作某個資源的權利,即反映在某個資源上的操作
允不允許,不反映誰去執行這個操作。所以後續還需要把權限賦予給用戶,即定義哪個用
戶允許在某個資源上做什麼操作(權限),Shiro 不會去做這件事情,而是由實現人員提供。
Shiro 支持粗粒度權限(如用戶模塊的所有權限)和細粒度權限(操作某個用戶的權限,即
實例級別的),後續部分介紹。
角色
角色代表了操作集合,可以理解爲權限的集合,一般情況下我們會賦予用戶角色而不是權
限,即這樣用戶可以擁有一組權限,賦予權限時比較方便。典型的如:項目經理、技術總
監、CTO、開發工程師等都是角色,不同的角色擁有一組不同的權限。
隱式角色:即直接通過角色來驗證用戶有沒有操作權限,如在應用中CTO、技術總監、開
發工程師可以使用打印機,假設某天不允許開發工程師使用打印機,此時需要從應用中刪
除相應代碼;再如在應用中CTO、技術總監可以查看用戶、查看權限;突然有一天不允許
技術總監查看用戶、查看權限了,需要在相關代碼中把技術總監角色從判斷邏輯中刪除掉;
即粒度是以角色爲單位進行訪問控制的,粒度較粗;如果進行修改可能造成多處代碼修改。
顯示角色:在程序中通過權限控制誰能訪問某個資源,角色聚合一組權限集合;這樣假設
哪個角色不能訪問某個資源,只需要從角色代表的權限集合中移除即可;無須修改多處代
碼;即粒度是以資源/實例爲單位的;粒度較細。

shiro支持三種方式的授權

1.編程式
通過if/else 授權代碼完成

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
//有權限
} else {
//無權限
}

2.註解式
通過在執行的java方法上放置相應的註解來實現

@RequiresRoles("admin")
public void hello() {
//有權限
}

3.標籤式
在jsp通過相應的標籤來完成

<shiro:hasRole name="admin">
<!— 有權限—>
</shiro:hasRole>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章