java接口防刷_API 接口防刷

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阐述了某个被标注的类型是被继承的。

* 如果一个使用了@Inherited

你可能感兴趣的:(java接口防刷)