我需要用Java实现一个简单api的基本速率限制(每天最多40-50个请求) 要求是: 来自IP的请求应在M秒内限制为N(例如:60秒内10次请求) 这是我所做的:使用过滤器,逻辑是: 方法1: 使用cache2k保存IP地址和带有计数和上次访问时间的pojo
将每个ip用作键,将pojo用作值(pojo具有诸如:count的字段,最后一次访问。)
一旦请求到来,请检查缓存中的IP,
如果未检索到IP,则将其插入缓存: 键:ip value:pojo的计数为1,最后一次访问为当前日期。
如果检索到IP,则检查上次访问日期。
如果上次访问时间与当前时间之间的差为> M秒,则表示在超过M秒的时间内没有来自此ip的请求。创建一个新的Pojo,其计数为1,最后一次访问为当前日期,并插入到缓存
如果差异为 如果计数为 如果count = N,请过滤请求-不允许请求
方法2:
将缓存过期时间设置为M秒:
检查条目是否在缓存中。
我不想通过使用Guava来简化应用程序而使事情复杂化。
如果有人可以提出建议,那就太好了。
谢谢