第二十二章 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')")
能够使用在具体的方法上,以一个方法参数作为表达式的一部分,来决定当前用户是否拥有给定的权限。