授權也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯資料/頁面操作等)。在授權中需了解的幾個關鍵物件:主體(subject)
、資源(resource)
、許可權(permission)
、角色(role)
。
主體(subject)
主體,即訪問應用的使用者,在shiro中使用subject代表該使用者。使用者只有授權後才允許訪問相應的資源。
資源(resource)
在應用中使用者可以訪問的任何東西,比如訪問jsp頁面、檢視/編輯某些資料、訪問某個業務方法、列印文字等等都是資源。使用者只要授權後才能訪問。
許可權(permission)
安全策略中的原子授權單位,通過許可權我們可以表示在應用中使用者有沒有操作某個資源的權力。即許可權表示在應用中使用者能不能訪問某個資源,如:
如上可以看出,許可權代表了使用者有沒有操作某個資源的權利,即反映在某個資源上的操作允不允許,不反映誰去執行這個操作。所以後續還需要把許可權賦予給使用者,即定義哪個使用者允許在某個資源上做什麼操作(許可權),shiro不會去做這件事情,而是由實現人員提供。
shiro支援粗粒度許可權(如使用者模組的所有許可權)和細粒度許可權(操作某個使用者的許可權,即例項級別的),後續部分介紹。
角色(role)
角色代表了操作集合,可以理解為許可權的集合,一般情況下我們會賦予使用者角色而不是許可權,即這樣使用者可以擁有一組許可權,賦予許可權時比較方便。典型的如:專案經理、技術總監、cto、開發工程師等都是角色,不同的角色擁有一組不同的許可權。
隱式角色
即直接通過角色來驗證使用者有沒有操作許可權,如在應用中cto、技術總監、開發工程師可以使用印表機,假設某天不允許開發工程師使用印表機,此時需要從應用中刪除相應**;再如在應用中cto、技術總監可以檢視使用者、檢視許可權;突然有一天不允許技術總監檢視使用者、檢視許可權了,需要在相關**中把技術總監角色從判斷邏輯中刪除掉;即粒度是以角色為單位進行訪問控制的,粒度較粗;如果進行修改可能造成多處**修改。
顯示角色
在程式中通過許可權控制誰能訪問某個資源,角色聚合一組許可權集合;這樣假設哪個角色不能訪問某個資源,只需要從角色代表的許可權集合中移除即可;無須修改多處**;即粒度是以資源/例項為單位的;粒度較細。
安全框架 shrio 初探
常見的安全框架有spring security apache shrio 前者過於繁雜,不易掌握 後者較為簡易,且常見功能也具備 對rbac的理解 基於角色的控制訪問 role based access contro 使用者通過成為適當角色的成員而得到這些角色的許可權,許可權授予角色,再把角色賦予使...
shrio認證功能例項
shrio認證功能例項 一 書寫登入方法 public void checkuser catch exception ex 二 書寫自定義realm package cn.itcast.erp.realm import cn.itcast.erp.biz.iempbiz import cn.itca...
shrio之許可權注釋
requiresauthentication 驗證使用者是否登入,等同於方法 subject.isauthenticated 結果為 true時。requiresuser 驗證使用者是否被記憶,user 有兩種含義 一種是成功登入的 subject.isauthenticated 結果為 true ...