我试图限制用户可以使用我的REST API创建的帐户数量。

我本来希望使用Guava的RateLimiter仅允许IP在10分钟内创建5个帐户,但是RateLimiter.create方法仅采用double指定“每秒”的许可数量。

是否可以将RateLimiter配置为以大于一秒的粒度释放许可证?

最佳答案

RateLimiter.create javadoc:



因此,您可以将permitsPerSecond设置为小于1.0,以使释放许可证的频率少于每秒一次。

在您的特定情况下,十分钟内五个帐户可简化为每两分钟一个帐户,即每120秒一个帐户。您需要将1.0/120传递给permitsPerSecond

在您的用例中,您可能希望容纳对帐户创建的突发请求。 RateLimiter规范似乎并未定义未使用的许可所发生的情况,但是默认实现SmoothRateLimiter似乎允许许可证累积达到某个最大值以满足突发情况。此类不是公共(public)的,因此没有javadoc文档,但是 SmoothRateLimiter 源代码中有一个冗长的注释,其中详细讨论了当前行为。

07-24 09:47