springboot接口防刷

本文介绍了如何在SpringBoot中实现接口的防刷策略。通过自定义注解@RequestLimit和拦截器RequestLimitIntercept,结合Redis记录请求次数并设置时效性,限制在指定时间内同一接口的最大请求次数,从而防止接口被频繁恶意请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

API 接口防刷
顾名思义,想让某个接口某个人在某段时间内只能请求N次。
在项目中比较常见的问题也有,那就是连点按钮导致请求多次,以前在web端有表单重复提交,可以通过token 来解决。
除了上面的方法外,前后端配合的方法。现在全部由后端来控制。

原理
在你请求的时候,服务器通过redis 记录下你请求的次数,如果次数超过限制就不给访问。
在redis 保存的key 是有时效性的,过期就会删除。

代码实现:
为了让它看起来逼格高一点,所以以自定义注解的方式实现

@RequestLimit 注解
import java.lang.annotation.*;

/**

  • 请求限制的自定义注解
  • @Target 注解可修饰的对象范围,ElementType.METHOD 作用于方法,ElementType.TYPE 作用于类
  • (ElementType)取值有:
  • 1.CONSTRUCTOR:用于描述构造器
  • 2.FIELD:用于描述域
  • 3.LOCAL_VARIABLE:用于描述局部变量
  • 4.METHOD:用于描述方法
  • 5.PACKAGE:用于描述包
  • 6.PARAMETER:用于描述参数
  • 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
  • @Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;
  • 而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,
  • 而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。
  • 使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
  • (RetentionPoicy)取值有:
  • 1.SOURCE:在源文件中有效(即源文件保留)
  • 2.CLASS:在class文件中有效(即class保留)
  • 3.RUNTIME:在运行时有效(即运行时保留)
  • @Inherited
  • 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DVV_BLOG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值