Spring 超过速率限制时启动 Bucket4j 自定义 http 响应正文

Spring Boot Bucket4j customize http response body when rate limit exceeds

我已经使用 Spring Boot Bucket4j starter(bucket4j-spring-boot-starter) 和 ehcache 配置了 API 速率限制。它 returns 429 响应超过速率限制时带有以下消息,但我想动态自定义响应正文。可以说我想在响应中添加时间戳。我怎样才能做到这一点?我在 application.properties 文件中设置响应正文:

bucket4j.filters[0].http-response-body={ "status": 429, "error": "Too Many Requests", "message": "API rate limit exceeded" }

速率限制器只是抛出通常的异常,这意味着您可以添加自己的自定义错误消息处理程序并根据需要在此处理程序中重写响应。查看更多相关信息 here

直到目前的入门版本v0.5.2,似乎不支持动态自定义响应body。在过滤器源代码 (https://github.com/MarcGiffing/bucket4j-spring-boot-starter/blob/master/bucket4j-spring-boot-starter/src/main/java/com/giffing/bucket4j/spring/boot/starter/filter/servlet/ServletRequestFilter.java) 中,您可以看到响应 body 似乎仅由配置决定。而且他们没有使用例外。

但是您仍然可以使用一种稍微棘手的方法来发送动态响应 body。

  1. 将响应 body 设置为空字符串
  2. 创建一个比 bucket4j 更高阶的过滤器,并检查状态代码是否为 429。如果是,请创建您自己的响应 body 并附加到编写器。

*如果需要,您还可以在该过滤器中设置一些 headers。