From 65d84afcb8fb4ed1d3cfded76e14765ec4dd49ca Mon Sep 17 00:00:00 2001 From: ruansheng Date: Fri, 2 Dec 2022 09:18:17 +0800 Subject: [PATCH] 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(); } }