首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次限制获得公共服务

多次限制获得公共服务
EN

Stack Overflow用户
提问于 2016-09-22 09:11:55
回答 2查看 2.8K关注 0票数 4

我有这种情况。想象一下那里有公共休息服务。我们不希望有人能够在短时间内多次访问该服务,因为他们将能够阻止我们的数据库(我想,基本上是DDOS攻击)。

是否有办法有效地防止这类攻击?我们使用的技术是Spring/Spring安全性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-16 15:32:27

如果您正在使用Spring,那么有一个相当新的开放源码项目来处理这个问题:

https://github.com/weddini/spring-boot-throttling

控制Spring服务的声明式方法。@Throttling注释帮助您限制每个java.util.concurrent.TimeUnit对特定用户的服务方法调用数、IP地址、header/cookie值或使用Spring (SpEL)。

显然,这不会防止在web服务器级别上的DDOS攻击,但它将有助于限制对长时间运行的查询的访问或实现公平的使用策略。

票数 2
EN

Stack Overflow用户

发布于 2022-01-02 22:43:09

对于那些对这个问题感兴趣的人来说,弹簧开机节流似乎不再被维护。

所以,我来看看bucket4j

使用非常简单:有三个主要对象:

  • Bucket:允许定义可用令牌的总容量的接口。它还提供了使用令牌的方法。
  • 带宽:允许定义桶的限制的类。
  • 填充:类允许使用新的令牌定义存储桶的方式。

简单的Spring控制器示例:

代码语言:javascript
复制
@RestController
public class TestLimit {
    
    private Bucket bucket = null;
    
    public MsGeneratorController() {
        Bandwidth limit = Bandwidth.classic(120, Refill.greedy(120, Duration.ofMinutes(1)));
        this.bucket = Bucket4j.builder().addLimit(limit).build();
    }

    @RequestMapping(path = "/test-limit/", method = RequestMethod.GET)
    public ResponseEntity<String> download() throws IOException {

        if (this.bucket.tryConsume(1)) {
            return ResponseEntity.status(HttpStatus.OK).build();
        }else {
            return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).build();
        }
    }
}

在这种情况下,我们有每分钟120个请求的限制,桶容量为120,每分钟填充120令牌。

如果我们超过了这个限制,我们将收到一个HTTP429代码(TOO_MANY_REQUESTS)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39634868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档