SpringBoot AOP 简单的权限校验

本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。

书接上回登录与注册功能

我们的用户表里面不是有role(权限)这个字段吗

在JWT令牌的生成中,我们加入了role字段。

那么接下来,我们就可以通过这个字段来实现权限校验。

我这里就很简单,只有一个Permission注解和一个PermissionAspect类

Permission

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

PermissionAspect类:

java 复制代码
@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的用户发送到这个路径的请求才能被放行处理。这样就特别灵活。

相关推荐
q***46525 分钟前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
努力发光的程序员8 分钟前
互联网大厂Java面试:从Spring Boot到大数据处理的实战场景问题解析
spring boot·微服务·云原生·java面试·大数据处理·技术解析·互联网求职
Li_76953211 分钟前
10分钟快速入手Spring Cloud Config
java·spring·spring cloud
源码技术栈16 分钟前
Java基于云计算的社区门诊系统源码 医院门诊系统源码 已实现医保结算 SaaS模式
java·云计算·源码·诊所·门诊·预约挂号·云门诊
三七互娱后端团队20 分钟前
告别“玄学”调参:DSPy 框架入门,让 AI 自动优化 AI 的提示词
人工智能·后端
星星电灯猴22 分钟前
iPhone 抓包工具怎么选?从 HTTPS 调试、TCP 数据流分析到多工具协同的完整方案
后端
程序员西西25 分钟前
SpringBoot整合JWT实现安全认证
java·计算机·程序员·编程
三七互娱后端团队28 分钟前
别再只用 Vector Search 了:手把手教你落地 GraphRAG(图谱增强检索)
人工智能·后端
南雨北斗35 分钟前
Kotlin中遍历集合的方法
后端
aiopencode1 小时前
Fiddler使用教程与抓包实战 HTTPHTTPS抓包、代理配置与接口调试完整指南
后端