SpringBoot通过注解实现权限控制,每一个增加权限注解的API,都会严格校验权限。
在RBAC(Role-based access control)设计中,一般有用户表、角色表、权限表,用户表和权限表通过中间角色表关联起来,二者一般不直接关联。
在简单的场景中,可以不使用权限表,直接通过角色口头或文档约定其权限,前后端也只通过角色判断权限操作。
在复杂场景中,或者权限很细的场景中,必须使用权限表,前后端主要通过权限字符串判断权限操作,角色主要作用是关联了二者的数据,但大多时候不被直接使用判断权限操作。
权限操作过程中,后端通过权限接口返回用户所有的权限信息,如角色、权限字符串,甚至权限菜单等。前端在权限事件触发前,都需要校验用户是否具备权限,一种是不具备权限则不显示,另一种是不具备权限提交被打回。当前端请求到后端后,后端API上已注解需要的权限,控制层之前的过滤器会校验用户是否具备此权限,如具备则放行,否则拦截返回,提示权限不足等错误。
前言
以前的权限拦截,一般是对路径进行拦截,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息。
Spring Security 支持使用注解的形式 ,写在方法和接口上拦截 。下文使用 @PreAuthorize(“hasAuthority(‘admin’)”) 方式注解。
开启权限注解
在 security 配置类 开启 权限注解功能
1 |
注解 @EnableGlobalMethodSecurity 有 3 个参数,【默认是 false , 需要开启时设为 true】
prePostEnabled : 确定 Spring Security 前置注释 [@PreAuthorize,@PostAuthorize,..] 是否应该启用;
secureEnabled : 确定 Spring Security 安全注释 [@Secured] 是否应该启用;
jsr250Enabled : 确定 JSR-250 注释 [@RolesAllowed..] 是否应该启用;
自定义权限服务类
1 | import java.util.Set; |
使用
1 |
|