From 65d84afcb8fb4ed1d3cfded76e14765ec4dd49ca Mon Sep 17 00:00:00 2001 From: ruansheng Date: Fri, 2 Dec 2022 09:18:17 +0800 Subject: [PATCH 1/2] Fixes redirect dsl accidental recursion. Fixes gh-2798 --- .../gateway/route/builder/GatewayFilterSpec.java | 2 +- .../RedirectToGatewayFilterFactoryTests.java | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java index c49893b6..ee4f52f9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java @@ -417,7 +417,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec redirect(String status, URI url) { - return redirect(status, url); + return redirect(status, url.toString()); } /** diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java index d23f4965..f9441fbb 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java @@ -16,6 +16,8 @@ package org.springframework.cloud.gateway.filter.factory; +import java.net.URI; + import org.junit.jupiter.api.Test; import org.springframework.boot.SpringBootConfiguration; @@ -51,6 +53,12 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); } + @Test + public void redirectToRelativeUrlFilterWorksWithStrStatusCode() { + testClient.get().uri("/").header("Host", "strcode.relativeredirect.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); + } + @Test public void toStringFormat() { Config config = new Config(); @@ -67,8 +75,12 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("relative_redirect", r -> r.host("**.relativeredirect.org") - .filters(f -> f.redirect(302, "/index.html#/customers")).uri("no://op")).build(); + return builder.routes() + .route("relative_redirect_uri_object", r -> r.host("strcode.relativeredirect.org") + .filters(f -> f.redirect("302", URI.create("/index.html#/customers"))).uri("no://op")) + .route("relative_redirect", r -> r.host("**.relativeredirect.org") + .filters(f -> f.redirect(302, "/index.html#/customers")).uri("no://op")) + .build(); } } From 0e23b9bc2f35fdf4a083bddad24fae2450e7bcb5 Mon Sep 17 00:00:00 2001 From: Cristian Ruiz Bonilla Date: Wed, 1 Dec 2021 20:12:11 +0100 Subject: [PATCH 2/2] Throw an error when replenishRate > burstCapacity Fixes gh-2453 --- .../cloud/gateway/filter/ratelimit/RedisRateLimiter.java | 3 +++ .../filter/ratelimit/RedisRateLimiterConfigTests.java | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java index 1e93a8d4..d1edc66c 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java @@ -40,6 +40,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.core.style.ToStringCreator; import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; /** @@ -335,6 +336,8 @@ public class RedisRateLimiter extends AbstractRateLimiter= this.replenishRate, "BurstCapacity(" + burstCapacity + + ") must be greater than or equal than replenishRate(" + this.replenishRate + ")"); this.burstCapacity = burstCapacity; return this; } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java index 7fe96f74..07f859a2 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.gateway.filter.ratelimit; +import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,6 +56,11 @@ public class RedisRateLimiterConfigTests { routeLocator.getRoutes().collectList().block(); } + @Test + public void shouldThrowAnErrorWhenReplenishRateIsHigherThanBurstCapacity() { + Assertions.assertThatThrownBy(() -> new RedisRateLimiter(10, 5)).isInstanceOf(IllegalArgumentException.class); + } + @Test public void redisRateConfiguredFromEnvironment() { assertFilter("redis_rate_limiter_config_test", 10, 20, 1, false);