当前位置: 首页 > news >正文

基于 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[]
http://www.jsqmd.com/news/240756/

相关文章:

  • 工地进度全靠催?工程项目必须盯死的五个里程碑节点
  • NumPy 迭代数组
  • 基于(BO)Bayes-LSTM-LSSVM数据分类预测 Matlab代码
  • pdf如何提取表格?
  • 《TCP/IP 邮件:深入解析网络通信中的邮件传输机制》
  • 有了NAS之后,我感觉我不是合格的仓鼠……
  • 从启动到收尾,生产型企业上 ERP 必须避开的 5 个坑
  • 一文搞懂Kotlin的let、with、run、apply、also标准函数
  • 搭建一套即便在你睡觉时,也能持续运转、产生收益的“睡后收入”系统
  • 揭秘9个免费AI论文生成器!导师不透露的效率飙升100%秘密
  • Solidworks2023软件启动就崩溃可能的解决办法
  • 深度学习毕设选题推荐:基于机器学习python_CNN深度学习卷积神经网络识别苹果品质基于python_CNN深度学习卷积神经网络识别苹果品质
  • 深度学习毕设项目推荐-基于python深度学习卷积网络训练识别核桃好坏
  • 面向 AIGC 的平台工程:构建高可用、可回滚的发布体系
  • 基于Flask和Vue的电商管理系统计算机毕业设计选题 计算机毕设项目 前后端分离【源码-文档报告-代码讲解】
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络训练识别牙齿是否健康
  • Maven 插件
  • 深入理解 TCP 四次挥手及相关网络问题
  • Windows SeBackupPrivilege 与 SeRestorePrivilege 特权利用
  • 【系统架构师备考笔记】003信息系统建设核心原则
  • 别把文献综述写成“读后感“!这套AI指令帮你构建“上帝视角“的学术地图
  • Ruby CGI Session
  • MX播放器 2.6.0| 安卓解码最强的媒体播放器
  • 【系统架构师备考笔记】004信息系统开发方法
  • 【毕业设计】基于深度学习python-CNN卷积神经网络对鸟类识别基于python-CNN卷积神经网络对鸟类识别
  • 2010年408(34)真题类似题详解:报文交换 vs 分组交换时延对比
  • 【课程设计/毕业设计】基于python机器学习卷积网络训练识别核桃好坏基于python深度学习卷积网络训练识别核桃好坏
  • 计算机深度学习毕设实战-基于python的深度学习卷积神经网络识别苹果品质基于python_CNN深度学习卷积神经网络识别苹果品质
  • 【系统架构师备考笔记】005 信息系统的分类与应用
  • 【课程设计/毕业设计】基于python-CNN机器学习卷积神经网络训练识别牙齿是否健康基于python-CNN卷积神经网络训练识别牙齿是否健康