今天上午看博客,看到了一篇大佬写的文章:https://blog.csdn.net/Muscleheng/article/details/91492302
讲诉了怎样根据IP限制指定时间内访问接口的次数,看完之后,发现有点像是硬编码,不够灵活,个人觉得 使用 aop+自定义注解可能会更好一些。
源码地址:https://github.com/winterme/SpringBoot-aop-annotation/
该文章核心思想就是,对每个访问的请求,使用 前缀+请求地址+ip+系统时间,存入 redis 里面,然后 访问之前先去 进行 泛读取key,就是省去最后的系统时间+"*" 进行匹配,看 key 有多少个,如果超过了,注解限制的,就直接返回 请求失败!
这里之所以要加上 系统时间,是因为 如果第一次存1,第二次+1 的话可能会 大量的 修改操作,为了方便,所以这样写的
如果不知道 如何整合redis或者安装请看这篇文章:https://blog.csdn.net/yali_aini/article/details/84996183
1.pom
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
UTF-8
8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-tomcat
provided
org.springframework
spring-beans
5.0.5.RELEASE
compile
org.springframework
spring-core
5.0.5.RELEASE
org.springframework
spring-context
5.0.5.RELEASE
org.springframework
spring-aop
4.3.9.RELEASE
org.aspectj
aspectjrt
1.8.9
org.aspectj
aspectjweaver
1.8.9
cglib
cglib
2.1
org.springframework
spring-tx
4.2.4.RELEASE
2.自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retentio