场景:
在实际业务场景中,有些关键接口不允许重复多次提交,例如订单提交、xx发布等接口,一旦重复提交可能会导致很多问题,此时就要做接口防重提限制。下面介绍一个简单的方案
一、创建防重提专用的注解
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface AccessLimit {
//key前缀
String keyPrefix() default "avoid_repeat_submit";
//允许请求上限数量
int maxCount() default 1;
//过期时间
int expireTime() default 3;
//过期单位
TimeUnit timeUnit() default TimeUnit.SECONDS;
}
二、创建切面类,拦截处理校验
1、实现思路,首次请求则设置缓存标识并标记次数为1,随后每次请求只要没达到上限限制数量,则标记次数增量+1,达到上限次数则报错提示
2、代码示例
@Slf4j
@Component
@Aspect
public class AccessLimitAspect {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Poin