• spring boot 自定义注解封装(@RequestLimit注解)


    描述:
    @RequestLimit(time=3)防重复点击,限制单个会话的请求频率。但是
    @RequestLimit注解中的参数不能传常量。
    例如:不能通过获取application.yml文件中的配置信息,去动态配置限制时间,所以就对@RequestLimit注解封装。

    1. 在application.yml配置文件中添加防止重复点击限制时长。
    # 后端防重复点击时间
    requestLimitTime: 3 # 时间限制值  3秒
    
    • 1
    • 2
    1. 自定义注解
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     1. 定义注解名称为:RequestLimit
      */
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface RequestLimit { 
    
        /**
         * 限制时间(秒),默认值为1秒
         */
        long time() default 1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 注解切面业务逻辑自行添加
    import com.dsy.cloud.bdss.platform.entity.RequestLimitMap;
    import com.dsy.cloud.bdss.platform.exception.BusiException;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class RequestLimitAspect  {
    
        @Value("${requestLimitTime:}")
        private long limitTime; // 从application.yml配置文件中获取时间限制值,单位秒
    
         // 对带有@RequestLimit注解的方法进行处理(备注:@annotation中注解名要和自定义的注解名对应)。
        @Around("@annotation(RequestLimit)")
        public Object limitRequestExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
            // 自行添加相关的业务逻辑...
            // 执行切点方法
            return joinPoint.proceed();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    1. 在controller层使用注解
        @PutMapping("/test")
        @RequestLimit
        public void test() throws Exception {
           // .....
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    hadoop学习使用
    redis的启动方式
    一文搞定Pandas核心概念之Series
    线程的面试八股
    VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)
    Access,Trunk,Hybrid的一些接触知识以及实验
    C++面试常见问题:手写String类
    JS逆向爬虫---请求参数加密②【某麦数据analysis参数加密】
    wget命令
    3D three.js(1)怎么写一个3D旋转的正方体
  • 原文地址:https://blog.csdn.net/qq_44997933/article/details/136330567