SpringSecurity学习笔记—SpringSecurity授权

1.授权简介

  1. 首先要确定你能在系统中做什么事情, 针对这个有的叫做: 授权, 有的叫做:鉴权, 还有叫权限控制。最终的目的就是你能在系统中能过做什么
  2. 安全权限控制问题其实就是控制能否访问url
  3. 在我们应用系统里面,如果想要控制用户权限,需要有2部分数据。
  1. 系统配置信息数据:写着系统里面有哪些URL,每一个url拥有哪些权限才允许被访问。
  2. 另一份数据就是用户权限信息:请求用户拥有权限
  1. 系统用户发送一个请求:系统配置信息和用户权限信息作比对,如果比对成功则允许访问。
  2. 当一个系统授权规则比较简单,基本不变时候,系统的权限配置信息可以写在我们的代码里面去的。
  3. 如果权限复杂,例如电商后台管理系统等就不能使用写在代码里面了. 需要RBAC权限模型设计

2.内置权限表达式

  1. Spring Security 使用Spring EL来支持,主要用于Web访问和方法安全上, 可以通过表达式来判断是否具有访问权限.
  2. 下面是Spring Security常用的内置表达式:ExpressionUrlAuthorizationConfigurer定义了所有的表达式

3.基于数据库的RBAC数据模型的权限控制

  1. 我们开发一个系统,必然面临权限控制的问题,不同的用户具有不同的访问、操作、数据权限。
  2. 形成理论的权限控制模型有:
  1. 自主访问控制(DAC: Discretionary Access Control)
  2. 强制访问控制(MAC: Mandatory Access Control)
  3. 基于属性的权限验证(ABAC: Attribute-Based AccessControl)等。
  1. 最常被开发者使用也是相对易用、通用的就是RBAC权限模型(Role-Based AccessControl)

4.RBAC权限模型简介

  1. RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。模型中有几个关键的术语:
  1. 用户:系统接口及访问的操作者
  2. 权限:能够访问某接口或者做某操作的授权资格
  3. 角色:具有一类相同操作权限的总称
  1. RBAC权限模型核心授权逻辑如下:
  1. 某用户是什么角色?
  2. 某角色具有什么权限?
  3. 通过角色对应的权限推导出用户的权限

5.基于RBAC设计权限表结构

  1. 一个用户有一个或多个角色
  2. 一个角色包含多个用户
  3. 一个角色有多种权限
  4. 一个权限属于多个角色

6.基于Spring Security 实现RBAC权限管理思路

  1. 动态查询数据库中用户对应的权限
  2. 给登录用户授权
  3. 设置访问权限
    未完