news 2026/8/1 3:54:01

基于 Spring AOP 的角色权限校验实现指南注解类型避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Spring AOP 的角色权限校验实现指南注解类型避坑指南

文章目录

  • 一、引入依赖
  • 二、 权限校验注解
  • 三、权限校验切面
  • 四、使用注解
  • 五、防踩坑(注解成员变量的类型)
      • ✅ 允许的注解成员(选项)类型

一、引入依赖

<!--aop依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

二、 权限校验注解

  • 写在annotation包下
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceAuthCheck{/** * 必须有某个角色 */StringmustRole()default"";}

三、权限校验切面

  • aop包下
@Aspect@ComponentpublicclassAuthInterceptor{@ResourceprivateUserServiceuserService;/** * 执行拦截 * * @param joinPoint 切入点 * @param authCheck 权限校验注解 */@Around("@annotation(authCheck)")publicObjectdoInterceptor(ProceedingJoinPointjoinPoint,AuthCheckauthCheck)throwsThrowable{StringmustRole=authCheck.mustRole();RequestAttributesrequestAttributes=RequestContextHolder.currentRequestAttributes();HttpServletRequestrequest=((ServletRequestAttributes)requestAttributes).getRequest();// 当前登录用户UserloginUser=userService.getLoginUser(request);UserRoleEnummustRoleEnum=UserRoleEnum.getEnumByValue(mustRole);// 不需要权限,放行if(mustRoleEnum==null){returnjoinPoint.proceed();}// 以下为:必须有该权限才通过// 获取当前用户具有的权限UserRoleEnumuserRoleEnum=UserRoleEnum.getEnumByValue(loginUser.getUserRole());// 没有权限,拒绝if(userRoleEnum==null){thrownewBusinessException(ErrorCode.NO_AUTH_ERROR);}// 要求必须有管理员权限,但用户没有管理员权限,拒绝if(UserRoleEnum.ADMIN.equals(mustRoleEnum)&&!UserRoleEnum.ADMIN.equals(userRoleEnum)){thrownewBusinessException(ErrorCode.NO_AUTH_ERROR);}// 通过权限校验,放行returnjoinPoint.proceed();}}

四、使用注解

@AuthCheck(mustRole=UserConstant.ADMIN_ROLE)

五、防踩坑(注解成员变量的类型)

✅ 允许的注解成员(选项)类型

除了下面这些类型,其余类型会报错

  1. 基本数据类型(primitive types)
    • byte,short,int,long
    • float,double
    • char
    • boolean
  2. 字符串类型
    • String
  3. 枚举类型(enum)
    • 例如:TimeUnit.SECONDS
  4. 注解类型(嵌套注解)
    • 即另一个@interface类型
  5. 以上类型的数组形式
    • 如:int[],String[],MyEnum[],MyAnnotation[]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 12:12:30

告别低效生产!先知AI如何重塑男装AIGC应用场景?

告别低效生产&#xff01;先知AI如何重塑男装AIGC应用场景&#xff1f;当谈论男装行业的未来时&#xff0c;无法避开AIGC这一变革性技术。然而&#xff0c;技术落地常伴随重重挑战&#xff1a;工具零散、效果不稳、人才短缺&#xff0c;令许多企业望而却步。北京先智先行科技有…

作者头像 李华
网站建设 2026/7/28 14:52:40

从启动到收尾,生产型企业上 ERP 必须避开的 5 个坑

很多生产型企业上 ERP&#xff0c;一上就容易踩坑。有的企业功能选得全&#xff0c;但一线操作没人用有的企业流程设计复杂&#xff0c;数据看起来齐全&#xff0c;却总是和实际不符还有的企业以为买了系统就能解决问题&#xff0c;结果上线半年发现&#xff0c;问题根本没消失…

作者头像 李华
网站建设 2026/8/1 0:11:25

【计算机毕业设计案例】基于卷积神经网络识别苹果品质基于python_CNN深度学习卷积神经网络识别苹果品质

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/29 10:14:41

013-计算机操作系统实验报告之Linux命令!

今天给大家分享的是一个计算机网络实验报告&#xff1a;Linux 常用命令的使用&#xff01; 相信学计算机的小伙伴肯定不陌生&#xff0c;这个实验包括了实验目的、实验内容、实验截图三个部分。 详细包括了该实验课程所需要的各个知识点。详情请看图片目录。只分享文档&#xf…

作者头像 李华
网站建设 2026/7/28 13:22:26

Scala 访问修饰符

Scala 访问修饰符 引言 Scala是一种多范式编程语言,它结合了面向对象和函数式编程的特性。在Scala中,访问修饰符是控制类、对象、方法和属性可访问性的关键字。正确使用访问修饰符是Scala编程中一个重要的方面,它有助于保护代码的安全性和封装性。本文将详细介绍Scala中的…

作者头像 李华