【问题标题】:Spring how to limit requests by ip from exact controllerSpring如何限制来自精确控制器的IP请求
【发布时间】:2018-04-07 03:44:17
【问题描述】:

有没有什么简单的方法可以将来自Spring RESTful controller 的请求限制为IP address?例如:

@RequestMapping(value="/user/create",method = RequestMethod.POST)

我想让客户每天创建大约 3 个用户。 我是否应该创建数据库表来保存 IP 和计数器并每天从表中删除数据?有没有更好的办法?

【问题讨论】:

  • 保留计数器和开始日期,而不是删除行,然后计算从开始日期到当天创建了多少用户,并确保它不是(用户计数)/(天数从开始日开始)>= 3.
  • 我喜欢你的想法,但是如果客户不为弱者创建用户会发生什么:) 比他一天可以创建 20 个用户。就我而言,这是一个糟糕的限制:)
  • 好的,我知道您的要求如何。在这种情况下,您可以检查当前日期是否与更新的日期计数不同并将计数重置为 1,否则如果还不是 3,则增加。

标签: java spring controller ip limit


【解决方案1】:
  1. 每个 ip 在特定时间最多可以调用此 api 3 次(它是恒定的),然后在 24 小时后重置限制?
  2. 或者在 0:00 重置限制,如果限制是可配置的?

对于前一种情况,建议使用bucket4j等limit rate限制库来适应这种场景(可以选择一些缓存作为其后端)并通过config file中的declare config来设置该接口的限制。(@987654321 @)

在后一种情况下,可能是设计你的表来持久化配置并使用 org.springframework.web.servlet.HandlerInterceptor 来拦截请求或将检查代码放在@RequestMapping方法下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2012-12-31
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多