Spring Security6 教程

WebExpressionAuthorizationManager 授权管理器

WebExpressionAuthorizationManager 类用于基于表达式语言实现复杂的访问控制决策。

WebExpressionAuthorizationManager 类允许你使用 SpEL(Spring Expression Language)定义复杂的访问控制规则,比基于权限的简单验证更灵活。

核心功能

  • 表达式驱动的授权,通过 SpEL 表达式定义授权规则,支持访问请求参数、会话、认证信息等。

  • 内置表达式支持,提供预定义的表达式变量(如 hasRole、isAuthenticated)简化常见场景。

  • 与 SecurityContext 集成,可访问当前用户的认证信息、权限和其他安全上下文。

常用表达式

下面是 SpEL 表达式中支持的内表达式:

表达式描述
permitAll允许所有请求,无需认证。
denyAll拒绝所有请求。
isAnonymous()允许匿名用户访问。
isAuthenticated()仅允许已认证用户访问。
isFullyAuthenticated()仅允许非记住我(remember-me)方式认证的用户访问。
hasRole('ROLE_ADMIN')仅允许拥有 ROLE_ADMIN 角色的用户访问(自动添加 ROLE_ 前缀)。
hasAuthority('read')仅允许拥有 read 权限的用户访问。
hasIpAddress('192.168.1.0/24')仅允许来自指定 IP 范围的请求。
hasAnyRole('ADMIN', 'USER')允许拥有任一指定角色的用户访问。
hasAnyAuthority('read', 'write')允许拥有任一指定权限的用户访问。
@beanName.method(authentication, request)调用自定义 Bean 方法进行授权决策。

简单示例

下面示例通过表达式实现对 /sys 表达式的控制,如下: 

http.authorizeHttpRequests(authorize -> authorize
    // 需要具有 admin 角色权限或者拥有 menu:sys:delete 权限才能访问 /sys 路径的请求
    .requestMatchers("/sys/**").access(new WebExpressionAuthorizationManager(
            "hasRole('admin') or hasAuthority('menu:sys:delete')"))
    .anyRequest().authenticated() // 其他请求需认证
)

 

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号