SpringSecurity学习笔记—SpringSecurity授权
1.授权简介
- 首先要确定你能在系统中做什么事情, 针对这个有的叫做:
授权
, 有的叫做:鉴权
, 还有叫权限控制
。最终的目的就是你能在系统中能过做什么 - 安全权限控制问题其实就是控制能否访问url
- 在我们应用系统里面,如果想要控制用户权限,需要有2部分数据。
- 系统配置信息数据:写着系统里面有哪些URL,每一个url拥有哪些权限才允许被访问。
- 另一份数据就是用户权限信息:请求用户拥有权限
- 系统用户发送一个请求:系统配置信息和用户权限信息作比对,如果比对成功则允许访问。
- 当一个系统授权规则比较简单,基本不变时候,系统的权限配置信息可以写在我们的代码里面去的。
- 如果权限复杂,例如电商后台管理系统等就不能使用写在代码里面了. 需要RBAC权限模型设计
2.内置权限表达式
- Spring Security 使用Spring EL来支持,主要用于Web访问和方法安全上, 可以通过表达式来判断是否具有访问权限.
- 下面是Spring Security常用的内置表达式:
ExpressionUrlAuthorizationConfigurer
定义了所有的表达式
3.基于数据库的RBAC数据模型的权限控制
- 我们开发一个系统,必然面临权限控制的问题,不同的用户具有不同的访问、操作、数据权限。
- 形成理论的
权限控制模型
有:
-
自主访问控制
(DAC: Discretionary Access Control) -
强制访问控制
(MAC: Mandatory Access Control) -
基于属性的权限验证
(ABAC: Attribute-Based AccessControl)等。
- 最常被开发者使用也是相对易用、通用的就是
RBAC权限模型(Role-Based AccessControl)
4.RBAC权限模型简介
- RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。模型中有几个关键的术语:
-
用户
:系统接口及访问的操作者 -
权限
:能够访问某接口或者做某操作的授权资格 -
角色
:具有一类相同操作权限的总称
- RBAC权限模型核心授权逻辑如下:
- 某用户是什么角色?
- 某角色具有什么权限?
- 通过角色对应的权限推导出用户的权限
5.基于RBAC设计权限表结构
- 一个用户有一个或多个角色
- 一个角色包含多个用户
- 一个角色有多种权限
- 一个权限属于多个角色
6.基于Spring Security 实现RBAC权限管理思路
- 动态查询数据库中用户对应的权限
- 给登录用户授权
- 设置访问权限
未完