我想防止Spring Boot 2 Web应用程序受到DDOS攻击,因此遇到框架bucket4j
(bucket4j-github)。我的应用程序将在heroku上运行,他们建议这样做(Heroku-Link)
到目前为止,一切都很好。我现在正在尝试实现bucket4j
,在此之后,如果我很快又频繁地按F5
,就会发生某些事情,发生错误或类似的情况。但是它的行为就像没有bucket4j
框架时一样,该请求已全部答复。
我的目标是限制IP的速率。目前,我只是从本地主机尝试过。
到目前为止我所拥有的:
pom.xml
<dependency>
<groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
<artifactId>bucket4j-spring-boot-starter</artifactId>
<version>0.1.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency><!-- Somehow I needed that since bucket4j-->
<groupId>javax.interceptor</groupId>
<artifactId>javax.interceptor-api</artifactId>
<version>1.2.2</version>
</dependency>
application.properties
# CACHE
spring.cache.jcache.config=classpath:ehcache.xml
# RATE LIMIT
bucket4j.enabled=true
bucket4j.filters[0].cache-name=buckets
bucket4j.filters[0].filter-method=servlet
bucket4j.filters[0].url=/*
bucket4j.filters[0].rate-limits[0].bandwidths[0].capacity=10
bucket4j.filters[0].rate-limits[0].bandwidths[0].time=1
bucket4j.filters[0].rate-limits[0].bandwidths[0].unit=minutes
bucket4j.filters[0].rate-limits[0].expression=getRemoteAddress()
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval=0
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval-unit=minutes
ehcache.xml
<config ... >
<cache alias="buckets">
<expiry><ttl unit="seconds">3600</ttl></expiry>
<heap unit="entries">1000000</heap>
</cache>
</config>
我缺少什么,或者我是否误解了框架?感谢您的提示。
答案 0 :(得分:0)
我认为您需要将该行更改为:
bucket4j.filters[0].url = .*
祝你好运!
答案 1 :(得分:0)
在我的Spring Boot配置中添加paint()
并使用onload
足以解决问题。
答案 2 :(得分:0)
确保maven正在导入依赖项。 在pom.xml中添加版本号可以为我解决问题:
<dependency>
<groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
<artifactId>bucket4j-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
通过不在pom.xml中添加版本号,maven无法导入依赖项。没有显示任何错误,但速率限制无效。
答案 3 :(得分:0)
我正在做 application.properties 并为我工作,你可以试试这个!
#This is for Api Rate Limit
#Reference -: https://github.com/MarcGiffing/bucket4j-spring-boot-starter#bucket4j-properties
spring.cache.type=jcache
spring.cache.jcache.config=classpath:ehcache.xml
bucket4j.enabled=true
bucket4j.filters[0].cache-name=buckets
bucket4j.filters[0].filter-method=servlet
bucket4j.filters[0].http-response-body={ "message": "Too many requests" }
bucket4j.filters[0].url=.*
bucket4j.filters[0].strategy=first
bucket4j.filters[0].rate-limits[0].expression=getRemoteAddr()
bucket4j.filters[0].rate-limits[0].bandwidths[0].capacity=10
bucket4j.filters[0].rate-limits[0].bandwidths[0].time=1
bucket4j.filters[0].rate-limits[0].bandwidths[0].unit=minutes
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval=0
bucket4j.filters[0].rate-limits[0].bandwidths[0].fixed-refill-interval-unit=minutes
并且不要忘记在任何 @EnableCaching
文件中添加 @Configuration