使用Spring AOP环绕通知做权限控制

    科技2024-10-02  26

    一、应用场景

    项目中用户使用相关功能时需要判断是否登陆

    二、自定义注解

    约定切入点是标记了@LoginJudge的方法

    //登陆判断 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface LoginJudge { }

    标注注解在相关业务方法上

    @PostMapping("/save") @LoginJudge public R save(@RequestHeader("Authorization") String Authorization ,@RequestBody SkuInfoEntity skuInfo){ if(skuInfoService.insertOneSkuInfo(skuInfo)) return R.ok(); else return R.error(); }

    三、编写切面

    @Aspect @Component public class LoginJudge { @Pointcut("@annotation(com.zhangxueliang.njithome.product.annotation.LoginJudge)") public void pointcut() { } //判断是否登陆 @Around("pointcut()") public R isLogin(ProceedingJoinPoint joinPoint) throws Throwable { //获得目标方法参数数组 Object[] args = joinPoint.getArgs(); //约定将token放在第一个参数 String Authorization = args[1].toString(); //伪代码,实际判断以你的项目来定 if (!Authorization.equals("123")) { //判断为未登陆,直接返回错误信息给前端 return R.error("未登录"); } // throw new RuntimeException(); else { //判断未登陆,执行业务代码 Object object = joinPoint.proceed(); //返回业务代码的最终返回值 return (R)object; } } }

    四、测试

    1.设置请求头的token(图片中是Authorization)是1 未通过验证

    Processed: 0.010, SQL: 8