基于 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.mzph.cn/news/1155874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工地进度全靠催?工程项目必须盯死的五个里程碑节点

我先说一个干工程很常见的场景&#xff1a;你到工地一看&#xff0c;塔吊在转、人也不少&#xff0c;外立面都起来了&#xff0c;看起来挺忙。 但实际上&#xff0c;图纸有两张还没最终确认地下管线有一段返工主材有一批在路上卡着下一阶段的班组还没完全进场你问施工单位&…

基于(BO)Bayes-LSTM-LSSVM数据分类预测 Matlab代码

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 基于贝叶斯算法优化长短期记忆神经网络结合最小二乘向量机((BO)Bayes-LSTM-LSSVM)数据分类预测 Matlab代码 贝叶斯优化LSTM的隐藏层节点数、学习率、正则化系数&#xff01; 程序已经调试好&#xff0c;无…

NumPy 迭代数组

NumPy 迭代数组 引言 NumPy 是 Python 中最常用的科学计算库之一,它提供了强大的数组操作功能。在数据分析和处理中,迭代数组是一个常见的需求。本文将详细介绍 NumPy 中迭代数组的各种方法,帮助读者更好地理解和使用 NumPy 进行科学计算。 NumPy 数组简介 在介绍迭代数…

pdf如何提取表格?

pdfplumber是专门用来处理PDF的第三方库&#xff0c;完全开源和免费&#xff0c;它最核心的功能是提取PDF的文本和表格&#xff0c;支持保留段落、换行、空格的原始格式&#xff0c;不会像某些库那样把不同区域的文本混在一起&#xff0c;是我体验下来最好用的PDF处理库。 pdfp…

《TCP/IP 邮件:深入解析网络通信中的邮件传输机制》

《TCP/IP 邮件:深入解析网络通信中的邮件传输机制》 引言 在互联网的海洋中,电子邮件(Email)作为一种基础的通信方式,承载着人们日常沟通、信息传递的重要使命。而TCP/IP协议作为互联网的核心协议之一,其与邮件传输的紧密结合,使得电子邮件的传输更加稳定、高效。本文…

有了NAS之后,我感觉我不是合格的仓鼠……

哈哈哈哈&#xff0c;今天又突然间想起一个比较有趣的事情&#xff1a;之前好像刚接触电脑的时候&#xff0c;存储空间似乎就一直不够使用。 至于原因嘛&#xff0c;我想大家心里都很清楚&#xff1a;感觉这个世界上的电子资料实在是太诱惑了&#xff0c;不知不觉之中&#xf…

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

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

搭建一套即便在你睡觉时,也能持续运转、产生收益的“睡后收入”系统

我们大多数人&#xff0c;包括曾经的我&#xff0c;都困在这样的循环里。不敢停&#xff0c;也不能停&#xff0c;因为手一停&#xff0c;收入的来源就断了。那种“万一”的恐惧——万一失业了&#xff0c;万一行业不行了——像一把悬在头顶的剑&#xff0c;让每个夜晚都变得焦…

揭秘9个免费AI论文生成器!导师不透露的效率飙升100%秘密

90%的学生都不知道这个隐藏功能——导师私下里都在用AI论文工具压缩工作量&#xff0c;却从不对外透露。 今天&#xff0c;我将揭开学术界真正的“信息差”&#xff1a;那些让导师审稿速度翻倍、学生熬夜变早起、查重率与AI率双低的黑科技&#xff0c;以及一份连实验室师兄都不…

一文搞懂Kotlin的let、with、run、apply、also标准函数

Kotlin 里有五个“看似相似、实则各有门派”的函数:let、with、run、apply、also。 它们是 Kotlin 官方定义的“标准函数(Standard Functions)”, 可是在面试中,它们也是让人最头疼的考点之一: “run 和 apply 有什么区别?” “什么时候用 let 比 also 更合适?” “w…

Solidworks2023软件启动就崩溃可能的解决办法

Solidworks2023软件启动就崩溃可能的解决办法 我的SOLIDWORKS软件版本 帮助→关于SOLIDWORKS软件版本: SOLIDWORKS(R) Premium 2023 SP0.1 SOLIDWORKS: 是达索系统(Dassault Systmes)旗下一款基于 Windows 开发的 3D CAD(计算机辅助设计)软件, 是目前全球工业设计、机械工程领域…

深度学习毕设选题推荐:基于机器学习python_CNN深度学习卷积神经网络识别苹果品质基于python_CNN深度学习卷积神经网络识别苹果品质

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

面向 AIGC 的平台工程:构建高可用、可回滚的发布体系

我至今还记得那个周五晚上&#xff0c;一个看似简单的功能发布&#xff0c;却导致了线上服务的全面崩溃。整个团队手忙脚乱地回滚版本&#xff0c;那个夜晚&#xff0c;我开始反思&#xff0c;我们的发布流程是不是从根上就错了。我们依赖的不是可靠的工具&#xff0c;而是工程…

深度学习毕设项目推荐-基于python深度学习卷积网络训练识别核桃好坏

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

基于Flask和Vue的电商管理系统计算机毕业设计选题 计算机毕设项目 前后端分离【源码-文档报告-代码讲解】

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

深度学习毕设项目推荐-基于python-CNN卷积神经网络训练识别牙齿是否健康

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

Maven 插件

Maven 插件 引言 Maven 作为一款强大的Java构建和管理工具,在Java开发领域得到了广泛应用。Maven 插件是Maven生态系统的重要组成部分,它可以帮助我们完成项目构建、测试、打包、部署等任务。本文将详细介绍Maven插件的原理、常用插件及其使用方法。 Maven 插件概述 Mave…

深入理解 TCP 四次挥手及相关网络问题

引言在计算机网络中&#xff0c;TCP&#xff08;传输控制协议&#xff09; 是最为广泛应用的协议之一&#xff0c;尤其在提供可靠的数据传输时。我们熟知 TCP 三次握手的过程&#xff0c;它用于建立连接&#xff0c;但在连接关闭时&#xff0c;TCP 需要进行 四次挥手&#xff0…

Windows SeBackupPrivilege 与 SeRestorePrivilege 特权利用

在 Windows 权限提升与横向移动的实战中&#xff0c;SeBackupPrivilege 和 SeRestorePrivilege 这两个特权几乎可以称得上是“核武器级”存在。只要一个普通用户&#xff08;甚至低权限账户&#xff09;被加入 Backup Operators 组&#xff0c;或者被显式授予其中任意一个特权&…

别把文献综述写成“读后感“!这套AI指令帮你构建“上帝视角“的学术地图

&#x1f30a; 每天8000篇论文的"信息海啸" 根据 Nature 的一项统计数据&#xff0c;全球每天发表的学术论文数量超过 8000篇。 面对如此汹涌的"信息海啸"&#xff0c;很多研究者——尤其是刚入门的研究生&#xff0c;往往会陷入一种**“深海窒息"的…