Spring boot 项目(七)——AOP权限校验

前言

之前写过AOP切面的详细解读以及通过AOP切面来进行操作日志的入库,本篇主要通过AOP切面来达到校验权限的目的
这是之前文章的链接
1、Spring boot 项目(五)——AOP切面:https://blog.csdn.net/weixin_45974176/article/details/120365438
2、Spring boot 项目(五)——AOP操作日志:https://blog.csdn.net/weixin_45974176/article/details/120374829

操作流程

1、新建权限校验注解

@Target(ElementType.METHOD)  // 该注解可以作用于那些类型元素上:类、方法、字段
@Retention(RetentionPolicy.RUNTIME) // 运行时生效
public @interface PreAuth {
    //权限字符串
    String value() default "";
}

2、新建权限校验切面

@Aspect
@Component
@Slf4j
@Order(1)
public class PreAuthAspect {
    @Pointcut("@annotation(com.qcby.informationsystem.anno.PreAuth)")
    public void preAuthCut() {

    }

    @Resource
    private SysUserMapper sysUserMapper;
    @Resource
    private HttpServletRequest request;
    /**
     * 可控制目标函数是否执行
     */
    @Around("preAuthCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("进入权限验证切面");
        //从切面织入点处通过反射机制获取织入点处的方法
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //获取切入点所在的方法
        Method method = signature.getMethod();

        //获取注解信息
        PreAuth preAuth = method.getAnnotation(PreAuth.class);


//        String nameValue = selfLog.name();
//        log.info("nameValue的值为:{}", nameValue);
//        String name = null;
//        //获取切入点方法参数
        String object =preAuth.value();
        log.info("obj**********"+object);
        String token= request.getHeader("token");
        Long id= Long.valueOf(JwtUtil.getAudience(token));
        List<String> list=sysUserMapper.auth(id);
        if(list.contains(object)){
            log.info("权限校验通过");
            log.info("结束权限验证切面");
            return joinPoint.proceed();
        }else{

            log.info("结束权限验证切面");
            return ResultJson.error("您没有该权限");
        }
    }
}

3、controller层的方法上

    @PreAuth("login:updatePassword")
    @RequestMapping("updatePassword")
    public void updatePassword(){}

4、结果
校验成功:
在这里插入图片描述
校验失败:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

--流星。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值