Controller一个用于测试的接口类
import java.util.Collections;import org.springframework.web.bind.annotation.GetMApping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/test")public class TestController {@GetMapping public Object test () {return Collections.singletonMap("success", true); }}WebMvcConfigration拦截器的配置
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import io.springboot.jwt.web.interceptor.RequestLimitInterceptor;@Configurationpublic class WebMvcConfiguration implements WebMvcConfigurer {@Override public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(this.requestLimitInterceptor()).addPathPatterns("/test"); }@Bean public RequestLimitInterceptor requestLimitInterceptor() {return new RequestLimitInterceptor(); }}通过@Test测试,初始化一个限流配置@Autowiredprivate ObjectRedisTemplate objectRedisTemplate;@Testpublic void test () { // 3秒内,只能请求2次 RequestLimitConfig requestLimitConfig = new RequestLimitConfig(2, 3, TimeUnit.SECONDS); // 限制的uri是 /test this.objectRedisTemplate.opsForHash().put(RedisKeys.REQUEST_LIMIT_CONFIG, "/test", requestLimitConfig);}使用浏览器演示

文章插图
【在SpingBoot中使用Redis对接口进行限流】
最后一些问题怎么灵活的配置都写到这个份儿上了,如果熟悉Redis以及客户端,我想提供一个“限流管理”接口的并不是难事儿 。
针对指定的用户限流这里演示的方法是,针对接口的限流 。有时候,也有一些特殊的需求,需要“针对不同”的用户来做限流 。打个比方 。针对A用户,允许有他1分钟请求20次接口,针对B用户,允许他1分钟请求10次接口 。这个其实也简单,只需要修改一下上面的两个限制key,在key中添加用户的唯一标识(例如:ID)
request_limit_config"/api2:{userId}" : {"limit": 10, "time": 1, "timeUnit": "SECONDS"}request_limit:{userId}:/api1在拦截器中获取到用户的ID,加上用户ID进行检索和判断,就可以完成针对用户的限流 。Restful 接口的问题
@GetMapping("/user/{id}")// restful的检索接口,往往把ID信息放在了URI中这就会导致上面的代码有问题,因为这里采用的是根据URI来完成的限流操作 。检索不同ID的用户,会导致URI不同 。解决办法我认为也很简单 。那就不要使用URI,可以通过 自定义注解,方式,不同的接口,定义不同的唯一标识 。在拦截器中获取到注解,读取到唯一的编码,代替原来的URI,即可 。推荐阅读
- Vue 中如何从插槽中发出数据
- 受教育者在哪些方面依法享有平等权利?
- Apollo配置中心管理后台的详解
- 第13双眼睛恐怖歌曲完整版 第13双眼睛歌曲的恐怖在哪里
- 人类对火星的探索进展到了什么程度 人类探索火星的步伐正在加快
- 木星是气态巨行星,也是太阳系中最大的 矮行星是围绕大行星运动的天体吗
- HEX文件格式介绍
- 费米悖论提出,银河系大约有2500亿颗恒星 费米悖论之所以被称为悖论,是因为对外星人?
- 黑茶加陈皮的功效,香苏茶具有解毒祛暑理气化淤温胃和中的功效
- 黑茶存在的误区有哪些,黑茶能煮多长时间
