第二十二章 Expression-Based Access Control - 基于表达式的访问控制
Spring Security 使用 SpringEL 作为表达式支持。
一、常用的内置表达式
| Expression | Description |
|---|---|
| hasRole([role]) | 主体是有具有指定角色 |
| hasAnyRole([role…]) | 主体是有具有指定角色之一 |
| hasAuthority([authority]) | 是否具有指定权限 |
| hasAnyAuthority([authority…]) | 是否具有指定权限之一 |
| principal | 允许直接访问主体对象 |
| authentication | 允许直接从 SecurityContext 获取当前主体 |
| permitAll | 总是为true |
| denyAll | 总是为false |
| isAnonymous() | 是否是匿名用户 |
| isRememberMe() | 是否是 remember-me 用户 |
| isAuthenticated() | 是否不是匿名用户 |
| isFullyAuthenticated() | 是否不是匿名用户,且不是remember-me 用户 |
| hasPermission(Object target,Object permission) | 用户是否可以访问权限为permission的目标 |
| hasPermission(Object targetId,String targetType,Object permission) | 用户是否可以访问权限为permission的目标 |
二、方法注解表达式
这两个注解 @PreAuthorize("hasRole('USER')") 与 @PreAuthorize("hasPermission(#contact, 'ADMIN')") 能够使用在具体的方法上,以一个方法参数作为表达式的一部分,来决定当前用户是否拥有给定的权限。