使用aop+redis+注解 实现 限制单位时间内访问接口的次数

本文介绍了如何通过AOP、自定义注解和Redis实现单位时间内对API访问次数的限制。核心思路是将访问请求的前缀、请求地址、IP和系统时间组合成key存入Redis,预读取key数量判断是否超过限定值,超过则返回错误信息。提供源码地址和整合Redis的参考链接。
摘要由CSDN通过智能技术生成

今天上午看博客,看到了一篇大佬写的文章: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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值