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

SpringBoot AOP 简单的权限校验

本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。
书接上回登录与注册功能
我们的用户表里面不是有role(权限)这个字段吗
在这里插入图片描述
在JWT令牌的生成中,我们加入了role字段。
那么接下来,我们就可以通过这个字段来实现权限校验。
在这里插入图片描述
我这里就很简单,只有一个Permission注解和一个PermissionAspect类
Permission

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
@Order(Ordered.HIGHEST_PRECEDENCE)
public @interface Permission {/*** 最小权限* @return*/int role() default 0;
}

PermissionAspect类:

@Slf4j
@Aspect
@Component
public class PermissionAspect {// 定义切点@Pointcut("within(@org.springframework.web.bind.annotation.RestController *) && @annotation(com.codehome.server.annotation.Permission)")public void autoPermissionPointcut(){}// 定义通知@Before("autoPermissionPointcut()")public void requirePermission(final JoinPoint joinPoint)throws PermissionException {log.info("权限校验开始");MethodSignature signature = (MethodSignature) joinPoint.getSignature();Permission permission = signature.getMethod().getAnnotation(Permission.class);Integer role = permission.role();if(BaseContext.getCurrentRole() >= role){log.info("权限校验通过");}else {throw new PermissionException("权限不足");}}
}

说明:在JWT令牌生成的时候我们存入了role,在JwtTokenAdminInterceptor拦截器中,我们将这个role取了出来并保存到了ThreadLocal中,所以在校验的时候,就通过这个role进行权限校验。
在这里插入图片描述
权限校验使用:
在Controller类中,我们在每个路径方法前加上我们写的注解@Permission(role=2),这个就代表着只有用户权限大于等于2的用户发送到这个路径的请求才能被放行处理。这样就特别灵活。
在这里插入图片描述

http://www.lryc.cn/news/418820.html

相关文章:

  • Java生成Word->PDF->图片:基于poi-tl 进行word模板渲染
  • JVM内存模型笔记
  • 每日一练 - eSight 网管远程告警通知方式
  • [matlab] 鲸鱼优化算法优化KNN分类器的特征选择
  • vscode ssh-remote 疑似内存泄漏问题
  • 初识自然语言处理NLP
  • 分布式系统架构-微服务架构
  • docker搭建内网穿透服务
  • html+css+js网页设计 体育 金轮健身7个页面
  • BGP基础简介(一)
  • 力扣面试150 反转链表 II 三指针
  • GPT-4.o mini
  • 【C++】优先级队列(容器适配器)
  • docker代理
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • AsyncTask
  • 嵌入式面试知识点总结 -- FreeRTOS篇
  • 【深度学习】注意力机制(Transformer)
  • 【MySQL】将一张表的某一个值赋值到另一张表中
  • 怎样确定局域网里面是否有MAC地址冲突
  • springboot 大学生兼职平台系统-计算机毕业设计源码05282
  • CentOS linux安装nginx
  • 事务性邮件接口API如何集成以实现自动化?
  • zabbix 监控软件
  • C语言随机数小游戏
  • 解决Ubuntu报“无法解析域名cn.archive.ubuntu.com“问题
  • 搭建pxe网络安装环境实现服务器自动部署
  • Go框架选战:Gin、Echo、Fiber的终极较量
  • 2024.8.08(python)
  • RabbitMQ知识总结(基本原理+高级特性)