SpEL Expressions
Spring表达式语言(SpEL)提供了一种声明性的方法,可以直接在注释中定义授权规则。@RouteAccess注解使用Spring Security自带的授权函数来评估SpEL表达式。
仅限Spring Security
SpEL表达式仅在使用Spring集成时可用。
基本用法
@RouteAccess注解接受一个评估为布尔值的SpEL表达式:
@Route("/admin/dashboard")
@RouteAccess("hasRole('ADMIN')")
public class AdminDashboardView extends Composite<Div> {
// 只有具有ROLE_ADMIN权限的用户可以访 问
}
如果表达式评估为true,则授予访问权限。如果为false,用户将被重定向到访问拒绝页面。
内置安全函数
Spring Security通过SecurityExpressionRoot提供以下授权函数:
| 函数 | 参数 | 描述 | 示例 |
|---|---|---|---|
hasRole | String role | 检查用户是否具有指定角色(自动加前缀ROLE_) | hasRole('ADMIN')匹配ROLE_ADMIN |
hasAnyRole | String... roles | 检查用户是否具有任何指定的角色 | hasAnyRole('ADMIN', 'MANAGER') |
hasAuthority | String authority | 检查用户是否具有精确的权限字符串 | hasAuthority('REPORTS:READ') |
hasAnyAuthority | String... authorities | 检查用户是否具有任何指定的权限 | hasAnyAuthority('REPORTS:READ', 'REPORTS:WRITE') |
isAuthenticated | 无 | 如果用户已通过身份验证则返回true | isAuthenticated() |