使用SpringAop和自定义注解进行参数的校验

使用SpringAop和自定义注解进行参数的校验

使用场景,在提供外部访问接口时,根据要求,都需要对参数进行校验,防止进行参数的篡改

因为所有的第三方接口,都需要做这样一个校验的工作,所以做了一个面向切面编程,减少开发的工作量

关于SpringAop的基本概念

  • Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
  • Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
  • Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
  • Aspect(切面): 是切入点和通知(引介)的结合
  • Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
  • Target(目标对象):代理的目标对象(要增强的类)
  • Weaving(织入):是把增强应用到目标的过程,把advice 应用到 target的过程
  • Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

切入点:在类里边可以有很多方法被增强,比如实际操作中,只是增强了个别方法,则定义实际被增强的某个方法为切入点。
通知/增强:增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强。包括:​​​​​​​
切面:把增强应用到具体方法上面的过程称为切面。

通知类型

  • @Before前置通知:在方法之前执行
  • @After后置通知:在方法之后执行
  • @AfterRunning异常通知:方法出现异常执行
  • @AfterThrowing最终通知:在后置之后执行
  • @Around环绕通知:在方法之前和之后执行

参考代码

参数校验自定义注解

在这里插入图片描述

/**
 * 参数校验的注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ParamCheck {
}

参数校验切面类

在这里插入图片描述

/**
 * 参数校验切面类
 */
@Component
@Aspect
@Slf4j
public class ParamCheckAspect {

    /**
     * 定义了那些方法需要进行进行拦截
     * 加入了 ParamCheck注解的
     */
    @Pointcut("@annotation(com.gh.video.annotation.ParamCheck)")
    public void paramCheckAspect(){}

    @Before("paramCheckAspect()")
    public void beforeParamCheck(JoinPoint joinPoint){
//        获得得到http请求
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
//        获得方法入参
        Object[] args = joinPoint.getArgs();
        ParkingLotInfoAndDayCountVo parkingLotInfoAndDayCountVo = (ParkingLotInfoAndDayCountVo) args[0];
//        进行校验
        boolean hasAuth = ParseSignUtil.hasAuth(parkingLotInfoAndDayCountVo);
        if(hasAuth){//校验通过 直接返回执行业务方法
            return;
        }
//        校验不通过抛异常
        throw new GhCustomException(ExceptionEnum.PARAMETER_TEMPERING);
    }
}

切面和注解都定义完成后,就可以在对应的controller方法中添加注解进行参数的校验了

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值