zoukankan      html  css  js  c++  java
  • springboot~aspect通过@annotation进行拦截

    annotation就是注解的意思,在我们使用的拦截器时,可以通过业务层添加的某个注解,对业务方法进行拦截,之前我们在进行统一方法拦截时使用的是execution,而注解的拦截我们使用@annotation即可,我们可以做个例子,比如搞个防止重复提交的注解,然后在拦截器里去写防止重复提交的逻辑就好了。

    拦截器数据源

    /**
     * 防止重复提交
     *
     * @author BD-PC220
     */
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface RepeatSubmit {
        /**
         * 间隔多长时间提交,默认1秒
         *
         * @return
         */
        long time() default 1;
    
        /**
         * 作为验证重复提交的key,
         *
         * @return
         */
        String key();
    }
    
    

    业务实现的拦截器代码

    /**
     * URL重复提交拦截器.
     */
    @Slf4j
    @Component
    @Aspect
    public class RepeatSubmitAspect {
        @Autowired
        StringRedisTemplate redisTemplate;
    
        @Around("@annotation(repeatSubmit)")
        public Object around(ProceedingJoinPoint proceedingJoinPoint, RepeatSubmit repeatSubmit) throws Throwable {
            log.info("repeatSubmit={}", repeatSubmit.toString());
        }
    }
    
    

    在单元测试里去建立业务方法,然后建立单元测试的方法等

    @Component
    public class RepeatSubmitController {
        @RepeatSubmit(key = "get")
        public String get() {
            return "success";
        }
    }
    

    测试代码

    @RunWith(SpringRunner.class)
    @SpringBootTest()
    @Slf4j
    public class RepeatSubmitTest {
        @Autowired
        RepeatSubmitController repeatSubmitController;
    
        @Test
        public void test() {
            log.info(repeatSubmitController.get());
        }
    }
    

    研究

  • 相关阅读:
    Git 分布式版本控制的常见命令
    Redis数据库的学习及与python的交互
    Flask项目中数据库迁移的使用
    Flask项目中的蓝图简介及使用方式
    window环境下创建Flask项目需要安装常见模块命令
    Flask数据库常见关系模板代码
    Flask-WTF表单
    SCRF的简介及防护手段
    【题目】求n以内的素数个数
    【题目】英文字符进行频率的统计,直方图输出
  • 原文地址:https://www.cnblogs.com/lori/p/13528403.html
Copyright © 2011-2022 走看看