今天上午看博客,看到了一篇大佬写的文章: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
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>8</java.version>
</properties>
<dependencies>
<!-- 默认就内嵌了Tomcat 容器,如需要更换容器也极其简单-->
<!-- web启动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-data-redis 启动支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- application启动的时候引入tomcat -->
<dependency>
<grou