spring security 方法安全@PreAuthorize实现从方法参数中获取数据并判断权限

spring security版本:6.4.12

注解中使用hasRole方法,不能从方法参数中获取角色key,需要实现PermissionEvaluator接口。

实现PermissionEvaluator

java 复制代码
/**
 * spring security自定义权限检查(hasPermission)
 * 检查token中是否有request中请求对象的权限
 *
 * 如@PreAuthorize("hasPermission(#c, 'write')")
 * #c对应参数targetDomainObject
 * 不需要传第一个参数authentication
 *
 * @author xgw
 * @since 2024-15-10
 */
@Slf4j
public class MyPermissionEvaluator implements PermissionEvaluator {
    @Override
    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
        log.debug("判断权限:{}", permission);
        //todo 检查authentication中是否有targetDomainObject(参数)的权限

        //暂时全通过
        return true;
    }

    @Override
    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
        return false;
    }
}

配置自定义的PermissionEvaluator到springSecurity中

java 复制代码
@Bean
    static MethodSecurityExpressionHandler expressionHandler() {
        PermissionEvaluator permissionEvaluator = new MyPermissionEvaluator();
        final DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
        expressionHandler.setPermissionEvaluator(permissionEvaluator);
        return expressionHandler;
    }

在controller中使用

java 复制代码
   @PreAuthorize("hasPermission(#vo, 'write')")
    @DeleteMapping("v2/role/user")
    public void deleteRole(
            @P("vo")@Valid @RequestBody DeleteRoleVO vo) {
        roleService.deleteRole(vo);
    }

vo会被传到MyPermissionEvaluator中判断权限

相关推荐
星轨zb2 天前
通过实际demo掌握SpringSecurity+MP中的基本框架搭建
数据库·spring boot·spring security·mp
indexsunny5 天前
互联网大厂Java面试实战:从Spring Boot到微服务架构的音视频场景解析
java·spring boot·spring cloud·mybatis·spring security·jwt·flyway
indexsunny12 天前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用解析
java·spring boot·面试·kafka·spring security·电商·microservices
玄〤1 个月前
个人博客网站搭建day1-Spring Security 核心配置详解:CSRF、会话管理、授权与异常处理(漫画解析)
java·后端·spring·spring security·csrf
indexsunny1 个月前
互联网大厂Java面试实战:Spring Boot到Kafka的技术问答解析
java·spring boot·redis·junit·kafka·spring security·microservices
indexsunny2 个月前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
消失的旧时光-19432 个月前
第十三课:权限系统如何设计?——RBAC 与 Spring Security 架构
java·架构·spring security·rbac
编程彩机2 个月前
互联网大厂Java面试:从Spring Security到微服务架构场景解析
kafka·spring security·微服务架构·jwt·java面试·分布式追踪
编程彩机2 个月前
互联网大厂Java面试:从Spring Security到消息队列的场景解析
消息队列·spring security·微服务架构·java面试·分布式系统