Spring Boot 如何防止来自前端的多个请求?

n9vozmp4  于 2022-11-05  发布在  Spring
关注(0)|答案(3)|浏览(253)

是否有办法防止 Postman 或任何其他客户端向spring Boot 应用程序发出多个请求
我的意思是,我可以在Ajax中运行一个for循环作为示例,并向我的控制器发送大量请求。我如何防止这种情况?

z9gpfhce

z9gpfhce1#

实现这一点的一种方法如下所示,
在Sping Boot 项目中创建一个请求过滤器或拦截器,然后将请求IP地址保存在类似Radis的缓存服务器中一段预定义的时间。然后当一个请求到来时,从请求中提取IP地址并将其与该高速缓存中的值进行比较,如果该值存在,则可以在请求到达控制器之前将其返回,如果Radis中没有该IP地址的条目,您可以将该IP地址保存在radis中,并解析发送到控制器请求
https://www.baeldung.com/spring-boot-add-filter

dhxwm5r4

dhxwm5r42#

通常,我会使用以下策略来最小化前端向后端发送过多请求的影响:

  • 在UI层,实现一些UX,限制Web应用程序向后端发送许多请求(例如,在用户刚刚提交表单后禁用提交按钮几秒钟)。它只能处理普通人类用户,而不能处理API用户/机器人。但通常95%以上是普通用户。
  • 为了处理机器人,考虑使用一些CAPTCHA解决方案来提交表单。它主要用于识别请求是由实际的机器人还是人发送的。
  • 在后端网层中,实现某种类型的速率限制功能,以拒绝特定用户或IP地址或API密钥的请求,如果该用户/IP地址/API密钥在特定时间段内多次调用某个API,并且次数超过了特定阈值。resilience4j是一个简单的开源速率限制器。有关在spring-boot应用程序中使用它的示例,请参见this。本文在服务层应用了速率限制器,但我将在控制器层应用它。
eqqqjvef

eqqqjvef3#

非常好的问题,你需要使用断路器来处理这个问题。它允许你在服务器关闭时限制连接,并且在几次尝试之后它将不允许任何请求。这种情况发生在使用回退方法时,该方法将立即回复客户端,因此,清除线程并使你的应用程序更快。
checkout my implementation of this in GitHub
欢迎随时在GitHub中添加反馈或评论

相关问题