RABC權限管理
一、權限管理的目的
1、統一精細化、標准化權限管理。
2、業務應用數據權限多樣性,不同的應用數據管控的方式要求不同;同一個應用不同的場景和功能對權限的控制不同,需要建設通用性的權限模型;
3、權限模型的建模需要支持多級管控。
4、權限自管控
二、RABC權限管理
1、基本概念
基於角色的訪問控制。簡稱RABC,分為隱式的或者顯式的。
1)隱式
基於角色的安全檢查:如果權限需求變了,導致我們重新開發。
2)顯式
2、Apache Shiro
讓人容易理解和使用,安全整體考慮的問題特別多,提供了一下簡單的API,簡化了安全性的開發。
協助我們完成身份驗證和用戶信息,角色分配,確定用戶可以做什么事兒,session API,匯總了安全數據源。支持sso單點登錄的功能、記住我。
Shiro的整體架構:
1)Subject
本質就是當前執行用戶的一個視圖。包含用戶登錄的信息。
2)Security Manager
Shiro的整體核心。Authenticator,用戶身份認證,通過與realm交互獲取用戶信息,它有認證策略;Authorizer,用戶授權,允許用戶做哪些事兒;SessionManeger,創建和管理session的生命周期;SessionDAO對session持久化的類;
3)Realm
是1個接口,充當shiro與應用程序安全數據訪問的橋梁。
3、登錄驗證的例子
4、自定義realm
繼承AuthorizingRealm
自定義MD5 realm,加鹽
5、shiro的授權流程
6、shiro的授權方式
1)基於角色的訪問控制
If(subject.haseRole(“admin”)){
//操作什么資源
}
2)基於資源的訪問控制
if (subject. isPermission(“user:update:01”)) {
//資源實例 //對01用戶進行修改
}
if (subject. isPermission(“user:update:*”)) {
//資源類型 //對用戶進行修改
}
7、Shiro和SpringBoot的整合
1)引入jar包
2)ShiroConfig
①Shiro的過濾器鏈
Anon不需要認證
②自定義shiroDbRealm,進行身份驗證
8、Shiro提供的filter
9、權限場景
1)功能權限場景
2)數據權限場景
3)數據管控權限場景
整體架構
角色建成一個樹形結構,功能也建成一個樹結構,不用每次建立一個功能都綁定一次角色。
用斷言的方式驗證參數是否為空