redis实现IP访问次数限制

在spring cloud alibaba工程的网关模块中进行相关配置,实现限制每个IP在每秒只能访问3次(IP的限制原理是令牌桶算法)

步骤

添加依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

修改配置文件

修改application.yml文件

  • redis的配置
spring:
	redis:
		host: localhost
		# 默认端口号是6379
		port: 6379
  • 过滤器配置
    • 使用的过滤器是RequestRateLimiter
    • RedisKeyResolver是自定义的类,用来实现获取ip

    配置文件中填写首字母变成小写

spring:
	gateway:
		routes:
		- id: alibaba-provider
          uri: lb://alibaba-provider
          predicates:
            - Path=/ap/users
            - Method=get
		  filters:
            - RewritePath=/ap(?<abc>/?.*), $\{abc}
            - name: RequestRateLimiter
              # args是传入给RequestRateLimiter这个过滤器的参数
              args:
                # 给定redis中的key, 使用用户的ip作为key
                keyResolver: '#{@redisKeyResolver}'
                # 初始化往令牌桶中放的令牌数量
                redis-rate-limiter.replenishRate: 3
                # 每秒钟往令牌桶中存放的令牌的数量
                redis-rate-limiter.burstCapacity: 3

实现获取IP的组件

该组件能够获取远程请求的IP地址,自定义一个RedisKeyResolve类

@Component
public class RedisKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        return Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
    }
}

查看访问信息

将服务器开启以后,访问服务,在redis中运行keys *查看访问的ip信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值