From 8f1439f5c97d925370d2287e89496bd292685e9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 16:55:44 -0400 Subject: [PATCH 01/13] Bump mikepenz/action-junit-report from 2 to 4 (#3071) Bumps [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) from 2 to 4. - [Release notes](https://github.com/mikepenz/action-junit-report/releases) - [Commits](https://github.com/mikepenz/action-junit-report/compare/v2...v4) --- updated-dependencies: - dependency-name: mikepenz/action-junit-report dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1bfea73c..127c1b27 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -31,7 +31,7 @@ jobs: - name: Build with Maven run: ./mvnw clean install -B -U -Pspring -Dmaven.test.redirectTestOutputToFile=true -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - name: Publish Test Report - uses: mikepenz/action-junit-report@v2 + uses: mikepenz/action-junit-report@v4 if: always() # always run even if the previous step fails with: report_paths: '**/surefire-reports/TEST-*.xml' From 7becdc5c742e8813a404ff75fd725a0def18a7cc Mon Sep 17 00:00:00 2001 From: buildmaster Date: Wed, 4 Oct 2023 23:18:39 +0000 Subject: [PATCH 02/13] Bumping versions --- docs/src/main/asciidoc/_configprops.adoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index 2856b060..7b6c286a 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -20,8 +20,9 @@ |spring.cloud.gateway.filter.hystrix.enabled | `+++true+++` | Enables the hystrix filter. |spring.cloud.gateway.filter.json-to-grpc.enabled | `+++true+++` | Enables the JSON to gRPC filter. |spring.cloud.gateway.filter.local-response-cache.enabled | `+++false+++` | Enables the local-response-cache filter. -|spring.cloud.gateway.filter.local-response-cache.size | `+++5m+++` | Maximum size of the cache to evict entries for this route (in KB, MB and GB). -|spring.cloud.gateway.filter.local-response-cache.time-to-live | | Time to expire a cache entry (expressed in s for seconds, m for minutes, and h for hours). +|spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy | | +|spring.cloud.gateway.filter.local-response-cache.size | | Maximum size of the cache to evict entries for this route (in KB, MB and GB). +|spring.cloud.gateway.filter.local-response-cache.time-to-live | `+++5m+++` | Time to expire a cache entry (expressed in s for seconds, m for minutes, and h for hours). |spring.cloud.gateway.filter.map-request-header.enabled | `+++true+++` | Enables the map-request-header filter. |spring.cloud.gateway.filter.modify-request-body.enabled | `+++true+++` | Enables the modify-request-body filter. |spring.cloud.gateway.filter.modify-response-body.enabled | `+++true+++` | Enables the modify-response-body filter. From ee9d6ad16aabeaaaa84197325b2586db5f6bd6cb Mon Sep 17 00:00:00 2001 From: Ignacio Lozano Date: Tue, 31 Oct 2023 16:53:57 +0100 Subject: [PATCH 03/13] Correct the order when routes are refreshed by group (#3112) --- .../gateway/route/CachingRouteLocator.java | 5 +- .../GatewayControllerEndpointTests.java | 57 +++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java index 301e1e4c..bce31e31 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java @@ -88,8 +88,9 @@ public class CachingRouteLocator .onErrorResume(s -> Mono.just(List.of())); scopedRoutes.subscribe(scopedRoutesList -> { - Flux.concat(Flux.fromIterable(scopedRoutesList), getNonScopedRoutes(event)).materialize() - .collect(Collectors.toList()).subscribe(signals -> { + Flux.concat(Flux.fromIterable(scopedRoutesList), getNonScopedRoutes(event)) + .sort(AnnotationAwareOrderComparator.INSTANCE).materialize().collect(Collectors.toList()) + .subscribe(signals -> { applicationEventPublisher.publishEvent(new RefreshRoutesResultEvent(this)); cache.put(CACHE_KEY, signals); }, this::handleRefreshError); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java index 17337172..46763c94 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.function.Predicate; +import java.util.stream.Collectors; import org.assertj.core.util.Maps; import org.junit.jupiter.api.Assertions; @@ -193,6 +194,62 @@ public class GatewayControllerEndpointTests { }); } + @Test + public void testOrderOfRefreshByGroup() { + RouteDefinition testRouteDefinition = new RouteDefinition(); + testRouteDefinition.setUri(URI.create("http://example.org")); + testRouteDefinition.setOrder(1000); + String group1 = "group-1_" + UUID.randomUUID(); + testRouteDefinition.setMetadata(Map.of("groupBy", group1)); + + String routeId1 = "route-1_" + UUID.randomUUID(); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/" + routeId1) + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition)).exchange() + .expectStatus().isCreated(); + + RouteDefinition testRouteDefinition2 = new RouteDefinition(); + testRouteDefinition2.setUri(URI.create("http://example.org")); + testRouteDefinition2.setOrder(0); + String group2 = "group-2_" + UUID.randomUUID(); + testRouteDefinition2.setMetadata(Map.of("groupBy", group2)); + String routeId2 = "route-2_" + UUID.randomUUID(); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/" + routeId2) + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition2)).exchange() + .expectStatus().isCreated(); + + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/refresh?metadata=groupBy:" + group1) + .exchange().expectStatus().isOk(); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/refresh?metadata=groupBy:" + group2) + .exchange().expectStatus().isOk(); + + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes").exchange().expectStatus().isOk() + .expectBodyList(Map.class).consumeWith(result -> { + List responseBody = result.getResponseBody(); + + List ids = responseBody.stream() + .map(route -> route.get("route_id")) + .filter(id -> id.equals(routeId1) || id.equals(routeId2)) + .collect(Collectors.toList()); + assertThat(ids).containsExactly(routeId2, routeId1); + }); + + testRouteDefinition2.setOrder(testRouteDefinition.getOrder() + 1); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/" + routeId2) + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition2)).exchange() + .expectStatus().isCreated(); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/refresh?metadata=groupBy:" + group2) + .exchange().expectStatus().isOk(); + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes").exchange().expectStatus().isOk() + .expectBodyList(Map.class).consumeWith(result -> { + List responseBody = result.getResponseBody(); + List ids = responseBody.stream() + .map(route -> route.get("route_id")) + .filter(id -> id.equals(routeId1) || id.equals(routeId2)) + .collect(Collectors.toList()); + assertThat(ids).containsExactly(routeId1, routeId2); + }); + } + @Test public void testRefreshByGroup_whenRouteDefinitionsAreDeleted() { RouteDefinition testRouteDefinition = new RouteDefinition(); From 48612c4f6a208474a64182f64b8159647c743d8e Mon Sep 17 00:00:00 2001 From: buildmaster Date: Tue, 31 Oct 2023 23:18:18 +0000 Subject: [PATCH 04/13] Bumping versions --- .../actuate/GatewayControllerEndpointTests.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java index 46763c94..193761a5 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java @@ -226,10 +226,8 @@ public class GatewayControllerEndpointTests { .expectBodyList(Map.class).consumeWith(result -> { List responseBody = result.getResponseBody(); - List ids = responseBody.stream() - .map(route -> route.get("route_id")) - .filter(id -> id.equals(routeId1) || id.equals(routeId2)) - .collect(Collectors.toList()); + List ids = responseBody.stream().map(route -> route.get("route_id")) + .filter(id -> id.equals(routeId1) || id.equals(routeId2)).collect(Collectors.toList()); assertThat(ids).containsExactly(routeId2, routeId1); }); @@ -242,10 +240,8 @@ public class GatewayControllerEndpointTests { testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes").exchange().expectStatus().isOk() .expectBodyList(Map.class).consumeWith(result -> { List responseBody = result.getResponseBody(); - List ids = responseBody.stream() - .map(route -> route.get("route_id")) - .filter(id -> id.equals(routeId1) || id.equals(routeId2)) - .collect(Collectors.toList()); + List ids = responseBody.stream().map(route -> route.get("route_id")) + .filter(id -> id.equals(routeId1) || id.equals(routeId2)).collect(Collectors.toList()); assertThat(ids).containsExactly(routeId1, routeId2); }); } From 0aee03ec2a7bd93ab0fc3ea4941e4d73507d7cff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:30:01 -0400 Subject: [PATCH 05/13] Bump org.testcontainers:testcontainers-bom from 1.17.3 to 1.17.6 (#3072) Bumps [org.testcontainers:testcontainers-bom](https://github.com/testcontainers/testcontainers-java) from 1.17.3 to 1.17.6. - [Release notes](https://github.com/testcontainers/testcontainers-java/releases) - [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.17.3...1.17.6) --- updated-dependencies: - dependency-name: org.testcontainers:testcontainers-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2a5659e0..f79e28a9 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ 1.6.2 3.0.4-SNAPSHOT 4.0.5-SNAPSHOT - 1.17.3 + 1.17.6 From bdba26009c5cbca41b1903219275d6f081bdd01f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:33:40 -0400 Subject: [PATCH 06/13] Bump grpc.version from 1.47.0 to 1.47.1 (#3066) Bumps `grpc.version` from 1.47.0 to 1.47.1. Updates `io.grpc:grpc-netty` from 1.47.0 to 1.47.1 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.47.0...v1.47.1) Updates `io.grpc:grpc-protobuf` from 1.47.0 to 1.47.1 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.47.0...v1.47.1) Updates `io.grpc:grpc-stub` from 1.47.0 to 1.47.1 - [Release notes](https://github.com/grpc/grpc-java/releases) - [Commits](https://github.com/grpc/grpc-java/compare/v1.47.0...v1.47.1) --- updated-dependencies: - dependency-name: io.grpc:grpc-netty dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.grpc:grpc-protobuf dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.grpc:grpc-stub dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-cloud-gateway-integration-tests/grpc/pom.xml | 2 +- spring-cloud-gateway-server/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index 173fb6fe..99d52d3a 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -11,7 +11,7 @@ Spring Cloud Gateway gRPC Integration Test - 1.47.0 + 1.47.1 diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 8675cef1..a8ee278b 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -16,7 +16,7 @@ Spring Cloud Gateway Server ${basedir}/.. - 1.47.0 + 1.47.1 1.0.0 From 8a7a00c37b6e8d3c9d0abdfcf506c8b0e92e895b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:35:13 -0400 Subject: [PATCH 07/13] Bump org.apache.maven.plugins:maven-jar-plugin from 3.2.0 to 3.2.2 (#3069) Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.2.2. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.2.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-cloud-gateway-server/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index a8ee278b..803154d7 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -310,7 +310,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.2.2 From 37c0810887632fe5351179aa3ba0cc546b2f9f24 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 3 Nov 2023 19:49:27 +0000 Subject: [PATCH 08/13] Update SNAPSHOT to 4.0.8 --- docs/pom.xml | 2 +- pom.xml | 8 ++++---- spring-cloud-gateway-dependencies/pom.xml | 4 ++-- spring-cloud-gateway-integration-tests/grpc/pom.xml | 2 +- spring-cloud-gateway-integration-tests/http2/pom.xml | 2 +- .../mvc-failure-analyzer/pom.xml | 2 +- spring-cloud-gateway-integration-tests/pom.xml | 2 +- spring-cloud-gateway-mvc/pom.xml | 2 +- spring-cloud-gateway-sample/pom.xml | 2 +- spring-cloud-gateway-server/pom.xml | 2 +- spring-cloud-gateway-webflux/pom.xml | 2 +- spring-cloud-starter-gateway/pom.xml | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 2589bc58..79816f5a 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 spring-cloud-gateway-docs jar diff --git a/pom.xml b/pom.xml index f79e28a9..76825e70 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 pom Spring Cloud Gateway @@ -15,7 +15,7 @@ org.springframework.cloud spring-cloud-build - 4.0.6-SNAPSHOT + 4.0.5 @@ -54,8 +54,8 @@ 1.0.6.RELEASE 17 1.6.2 - 3.0.4-SNAPSHOT - 4.0.5-SNAPSHOT + 3.0.3 + 4.0.4 1.17.6 diff --git a/spring-cloud-gateway-dependencies/pom.xml b/spring-cloud-gateway-dependencies/pom.xml index 7a492726..e7d34943 100644 --- a/spring-cloud-gateway-dependencies/pom.xml +++ b/spring-cloud-gateway-dependencies/pom.xml @@ -6,12 +6,12 @@ spring-cloud-dependencies-parent org.springframework.cloud - 4.0.6-SNAPSHOT + 4.0.5 spring-cloud-gateway-dependencies - 4.0.8-SNAPSHOT + 4.0.8 pom spring-cloud-gateway-dependencies diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index 99d52d3a..de5665e0 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -17,7 +17,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-integration-tests/http2/pom.xml b/spring-cloud-gateway-integration-tests/http2/pom.xml index 5f859b8a..129b09c8 100644 --- a/spring-cloud-gateway-integration-tests/http2/pom.xml +++ b/spring-cloud-gateway-integration-tests/http2/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml index 81f08213..33cd5695 100644 --- a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml +++ b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-integration-tests/pom.xml b/spring-cloud-gateway-integration-tests/pom.xml index 0fbe46a0..4ea2f173 100644 --- a/spring-cloud-gateway-integration-tests/pom.xml +++ b/spring-cloud-gateway-integration-tests/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-mvc/pom.xml b/spring-cloud-gateway-mvc/pom.xml index f6a6a565..f7923349 100644 --- a/spring-cloud-gateway-mvc/pom.xml +++ b/spring-cloud-gateway-mvc/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-sample/pom.xml b/spring-cloud-gateway-sample/pom.xml index 541822ea..02ef7c97 100644 --- a/spring-cloud-gateway-sample/pom.xml +++ b/spring-cloud-gateway-sample/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 803154d7..44836930 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. spring-cloud-gateway-server diff --git a/spring-cloud-gateway-webflux/pom.xml b/spring-cloud-gateway-webflux/pom.xml index e4105512..1d68687d 100644 --- a/spring-cloud-gateway-webflux/pom.xml +++ b/spring-cloud-gateway-webflux/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. diff --git a/spring-cloud-starter-gateway/pom.xml b/spring-cloud-starter-gateway/pom.xml index c1fa1bd2..56b47145 100644 --- a/spring-cloud-starter-gateway/pom.xml +++ b/spring-cloud-starter-gateway/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.8 .. spring-cloud-starter-gateway From e023410fde37a5f011b0cf3a8f36f228d188a366 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 3 Nov 2023 19:56:47 +0000 Subject: [PATCH 09/13] Going back to snapshots --- docs/pom.xml | 2 +- pom.xml | 8 ++++---- spring-cloud-gateway-dependencies/pom.xml | 4 ++-- spring-cloud-gateway-integration-tests/grpc/pom.xml | 2 +- spring-cloud-gateway-integration-tests/http2/pom.xml | 2 +- .../mvc-failure-analyzer/pom.xml | 2 +- spring-cloud-gateway-integration-tests/pom.xml | 2 +- spring-cloud-gateway-mvc/pom.xml | 2 +- spring-cloud-gateway-sample/pom.xml | 2 +- spring-cloud-gateway-server/pom.xml | 2 +- spring-cloud-gateway-webflux/pom.xml | 2 +- spring-cloud-starter-gateway/pom.xml | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 79816f5a..2589bc58 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT spring-cloud-gateway-docs jar diff --git a/pom.xml b/pom.xml index 76825e70..f79e28a9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT pom Spring Cloud Gateway @@ -15,7 +15,7 @@ org.springframework.cloud spring-cloud-build - 4.0.5 + 4.0.6-SNAPSHOT @@ -54,8 +54,8 @@ 1.0.6.RELEASE 17 1.6.2 - 3.0.3 - 4.0.4 + 3.0.4-SNAPSHOT + 4.0.5-SNAPSHOT 1.17.6 diff --git a/spring-cloud-gateway-dependencies/pom.xml b/spring-cloud-gateway-dependencies/pom.xml index e7d34943..7a492726 100644 --- a/spring-cloud-gateway-dependencies/pom.xml +++ b/spring-cloud-gateway-dependencies/pom.xml @@ -6,12 +6,12 @@ spring-cloud-dependencies-parent org.springframework.cloud - 4.0.5 + 4.0.6-SNAPSHOT spring-cloud-gateway-dependencies - 4.0.8 + 4.0.8-SNAPSHOT pom spring-cloud-gateway-dependencies diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index de5665e0..99d52d3a 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -17,7 +17,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/http2/pom.xml b/spring-cloud-gateway-integration-tests/http2/pom.xml index 129b09c8..5f859b8a 100644 --- a/spring-cloud-gateway-integration-tests/http2/pom.xml +++ b/spring-cloud-gateway-integration-tests/http2/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml index 33cd5695..81f08213 100644 --- a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml +++ b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/pom.xml b/spring-cloud-gateway-integration-tests/pom.xml index 4ea2f173..0fbe46a0 100644 --- a/spring-cloud-gateway-integration-tests/pom.xml +++ b/spring-cloud-gateway-integration-tests/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-mvc/pom.xml b/spring-cloud-gateway-mvc/pom.xml index f7923349..f6a6a565 100644 --- a/spring-cloud-gateway-mvc/pom.xml +++ b/spring-cloud-gateway-mvc/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-sample/pom.xml b/spring-cloud-gateway-sample/pom.xml index 02ef7c97..541822ea 100644 --- a/spring-cloud-gateway-sample/pom.xml +++ b/spring-cloud-gateway-sample/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 44836930..803154d7 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. spring-cloud-gateway-server diff --git a/spring-cloud-gateway-webflux/pom.xml b/spring-cloud-gateway-webflux/pom.xml index 1d68687d..e4105512 100644 --- a/spring-cloud-gateway-webflux/pom.xml +++ b/spring-cloud-gateway-webflux/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-starter-gateway/pom.xml b/spring-cloud-starter-gateway/pom.xml index 56b47145..c1fa1bd2 100644 --- a/spring-cloud-starter-gateway/pom.xml +++ b/spring-cloud-starter-gateway/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8 + 4.0.8-SNAPSHOT .. spring-cloud-starter-gateway From aed52c2a0d4d22d9af48bba43ed40c8f9df79a59 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 3 Nov 2023 19:56:48 +0000 Subject: [PATCH 10/13] Bumping versions to 4.0.9-SNAPSHOT after release --- docs/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-gateway-dependencies/pom.xml | 2 +- spring-cloud-gateway-integration-tests/grpc/pom.xml | 2 +- spring-cloud-gateway-integration-tests/http2/pom.xml | 2 +- .../mvc-failure-analyzer/pom.xml | 2 +- spring-cloud-gateway-integration-tests/pom.xml | 2 +- spring-cloud-gateway-mvc/pom.xml | 2 +- spring-cloud-gateway-sample/pom.xml | 2 +- spring-cloud-gateway-server/pom.xml | 2 +- spring-cloud-gateway-webflux/pom.xml | 2 +- spring-cloud-starter-gateway/pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 2589bc58..01d573f7 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT spring-cloud-gateway-docs jar diff --git a/pom.xml b/pom.xml index f79e28a9..09cf4140 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT pom Spring Cloud Gateway diff --git a/spring-cloud-gateway-dependencies/pom.xml b/spring-cloud-gateway-dependencies/pom.xml index 7a492726..fb024578 100644 --- a/spring-cloud-gateway-dependencies/pom.xml +++ b/spring-cloud-gateway-dependencies/pom.xml @@ -11,7 +11,7 @@ spring-cloud-gateway-dependencies - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT pom spring-cloud-gateway-dependencies diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index 99d52d3a..811ddb9a 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -17,7 +17,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/http2/pom.xml b/spring-cloud-gateway-integration-tests/http2/pom.xml index 5f859b8a..8a664255 100644 --- a/spring-cloud-gateway-integration-tests/http2/pom.xml +++ b/spring-cloud-gateway-integration-tests/http2/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml index 81f08213..193729b2 100644 --- a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml +++ b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/pom.xml b/spring-cloud-gateway-integration-tests/pom.xml index 0fbe46a0..f772b003 100644 --- a/spring-cloud-gateway-integration-tests/pom.xml +++ b/spring-cloud-gateway-integration-tests/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-mvc/pom.xml b/spring-cloud-gateway-mvc/pom.xml index f6a6a565..eec3a4f3 100644 --- a/spring-cloud-gateway-mvc/pom.xml +++ b/spring-cloud-gateway-mvc/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-sample/pom.xml b/spring-cloud-gateway-sample/pom.xml index 541822ea..024cae69 100644 --- a/spring-cloud-gateway-sample/pom.xml +++ b/spring-cloud-gateway-sample/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 803154d7..7ad716ec 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. spring-cloud-gateway-server diff --git a/spring-cloud-gateway-webflux/pom.xml b/spring-cloud-gateway-webflux/pom.xml index e4105512..263c1f4b 100644 --- a/spring-cloud-gateway-webflux/pom.xml +++ b/spring-cloud-gateway-webflux/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. diff --git a/spring-cloud-starter-gateway/pom.xml b/spring-cloud-starter-gateway/pom.xml index c1fa1bd2..c35d04bf 100644 --- a/spring-cloud-starter-gateway/pom.xml +++ b/spring-cloud-starter-gateway/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.8-SNAPSHOT + 4.0.9-SNAPSHOT .. spring-cloud-starter-gateway From cba61f7b94bb9ea0e9c1bb3b929a4be8fd1327bc Mon Sep 17 00:00:00 2001 From: buildmaster Date: Sat, 4 Nov 2023 23:18:10 +0000 Subject: [PATCH 11/13] Bumping versions --- docs/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-gateway-dependencies/pom.xml | 2 +- spring-cloud-gateway-integration-tests/grpc/pom.xml | 2 +- spring-cloud-gateway-integration-tests/http2/pom.xml | 2 +- .../mvc-failure-analyzer/pom.xml | 2 +- spring-cloud-gateway-integration-tests/pom.xml | 2 +- spring-cloud-gateway-mvc/pom.xml | 2 +- spring-cloud-gateway-sample/pom.xml | 2 +- spring-cloud-gateway-server/pom.xml | 2 +- spring-cloud-gateway-webflux/pom.xml | 2 +- spring-cloud-starter-gateway/pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 01d573f7..2589bc58 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT spring-cloud-gateway-docs jar diff --git a/pom.xml b/pom.xml index 09cf4140..f79e28a9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT pom Spring Cloud Gateway diff --git a/spring-cloud-gateway-dependencies/pom.xml b/spring-cloud-gateway-dependencies/pom.xml index fb024578..7a492726 100644 --- a/spring-cloud-gateway-dependencies/pom.xml +++ b/spring-cloud-gateway-dependencies/pom.xml @@ -11,7 +11,7 @@ spring-cloud-gateway-dependencies - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT pom spring-cloud-gateway-dependencies diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index 811ddb9a..99d52d3a 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -17,7 +17,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/http2/pom.xml b/spring-cloud-gateway-integration-tests/http2/pom.xml index 8a664255..5f859b8a 100644 --- a/spring-cloud-gateway-integration-tests/http2/pom.xml +++ b/spring-cloud-gateway-integration-tests/http2/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml index 193729b2..81f08213 100644 --- a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml +++ b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway-integration-tests - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-integration-tests/pom.xml b/spring-cloud-gateway-integration-tests/pom.xml index f772b003..0fbe46a0 100644 --- a/spring-cloud-gateway-integration-tests/pom.xml +++ b/spring-cloud-gateway-integration-tests/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-mvc/pom.xml b/spring-cloud-gateway-mvc/pom.xml index eec3a4f3..f6a6a565 100644 --- a/spring-cloud-gateway-mvc/pom.xml +++ b/spring-cloud-gateway-mvc/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-sample/pom.xml b/spring-cloud-gateway-sample/pom.xml index 024cae69..541822ea 100644 --- a/spring-cloud-gateway-sample/pom.xml +++ b/spring-cloud-gateway-sample/pom.xml @@ -16,7 +16,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 7ad716ec..803154d7 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -7,7 +7,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. spring-cloud-gateway-server diff --git a/spring-cloud-gateway-webflux/pom.xml b/spring-cloud-gateway-webflux/pom.xml index 263c1f4b..e4105512 100644 --- a/spring-cloud-gateway-webflux/pom.xml +++ b/spring-cloud-gateway-webflux/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. diff --git a/spring-cloud-starter-gateway/pom.xml b/spring-cloud-starter-gateway/pom.xml index c35d04bf..c1fa1bd2 100644 --- a/spring-cloud-starter-gateway/pom.xml +++ b/spring-cloud-starter-gateway/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-gateway - 4.0.9-SNAPSHOT + 4.0.8-SNAPSHOT .. spring-cloud-starter-gateway From 811962d37a955f03f82217eec903ca116c02ffcb Mon Sep 17 00:00:00 2001 From: Fredrich Ombico Date: Tue, 7 Nov 2023 16:44:57 -0500 Subject: [PATCH 12/13] Support query parameters in RedirectTo filter Adds an optional boolean parameter to the RedirectTo filter to indicate whether the request query parameters should be included on the `url`. The parameter is treated as false when not set to preserve backwards compatibility. --- .../main/asciidoc/spring-cloud-gateway.adoc | 22 +++++++- .../RedirectToGatewayFilterFactory.java | 50 ++++++++++++++--- .../route/builder/GatewayFilterSpec.java | 53 ++++++++++++++++++- .../RedirectToGatewayFilterFactoryTests.java | 32 ++++++++++- .../src/test/resources/application.yml | 8 +++ 5 files changed, 155 insertions(+), 10 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-gateway.adoc b/docs/src/main/asciidoc/spring-cloud-gateway.adoc index f7ce13cc..1b8d609b 100644 --- a/docs/src/main/asciidoc/spring-cloud-gateway.adoc +++ b/docs/src/main/asciidoc/spring-cloud-gateway.adoc @@ -1242,10 +1242,12 @@ spring: === The `RedirectTo` `GatewayFilter` Factory -The `RedirectTo` `GatewayFilter` factory takes two parameters, `status` and `url`. +The `RedirectTo` `GatewayFilter` factory takes three parameters, `status`, `url`, and optionally `includeRequestParams`. The `status` parameter should be a 300 series redirect HTTP code, such as 301. The `url` parameter should be a valid URL. This is the value of the `Location` header. +The `includeRequestParams` parameter indicates whether request query parameters should be included on the `url`. +When not set, it will be treated as `false`. For relative redirects, you should use `uri: no://op` as the uri of your route definition. The following listing configures a `RedirectTo` `GatewayFilter`: @@ -1266,6 +1268,24 @@ spring: This will send a status 302 with a `Location:https://acme.org` header to perform a redirect. +The following example configures a `RedirectTo` `GatewayFilter` with `includeRequestParams` set to `true`. + +.application.yml +[source,yaml] +---- +spring: + cloud: + gateway: + routes: + - id: prefixpath_route + uri: https://example.org + filters: + - RedirectTo=302, https://acme.org, true +---- + +When a request with query `?skip=10` is made to the gateway, the gateway will send a status 302 with a +`Location:https://acme.org?skip=10` header to perform a redirect. + === `RemoveJsonAttributesResponseBody` `GatewayFilter` Factory diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java index 87f7f7d0..cf9845e0 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java @@ -30,6 +30,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.util.Assert; import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.util.UriComponentsBuilder; import static org.springframework.cloud.gateway.support.GatewayToStringStyler.filterToStringCreator; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.setResponseStatus; @@ -50,40 +51,66 @@ public class RedirectToGatewayFilterFactory */ public static final String URL_KEY = "url"; + /** + * IncludeRequestParams key. + */ + public static final String INCLUDE_REQUEST_PARAMS_KEY = "includeRequestParams"; + public RedirectToGatewayFilterFactory() { super(Config.class); } @Override public List shortcutFieldOrder() { - return Arrays.asList(STATUS_KEY, URL_KEY); + return Arrays.asList(STATUS_KEY, URL_KEY, INCLUDE_REQUEST_PARAMS_KEY); } @Override public GatewayFilter apply(Config config) { - return apply(config.status, config.url); + return apply(config.status, config.url, config.includeRequestParams); } public GatewayFilter apply(String statusString, String urlString) { + return apply(statusString, urlString, false); + } + + public GatewayFilter apply(String statusString, String urlString, boolean includeRequestParams) { HttpStatusHolder httpStatus = HttpStatusHolder.parse(statusString); Assert.isTrue(httpStatus.is3xxRedirection(), "status must be a 3xx code, but was " + statusString); final URI url = URI.create(urlString); - return apply(httpStatus, url); + return apply(httpStatus, url, includeRequestParams); } public GatewayFilter apply(HttpStatus httpStatus, URI uri) { - return apply(new HttpStatusHolder(httpStatus, null), uri); + return apply(new HttpStatusHolder(httpStatus, null), uri, false); + } + + public GatewayFilter apply(HttpStatus httpStatus, URI uri, boolean includeRequestParams) { + return apply(new HttpStatusHolder(httpStatus, null), uri, includeRequestParams); } public GatewayFilter apply(HttpStatusHolder httpStatus, URI uri) { + return apply(httpStatus, uri, false); + } + + public GatewayFilter apply(HttpStatusHolder httpStatus, URI uri, boolean includeRequestParams) { return new GatewayFilter() { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!exchange.getResponse().isCommitted()) { setResponseStatus(exchange, httpStatus); + String location; + if (includeRequestParams) { + location = UriComponentsBuilder.fromUri(uri).queryParams(exchange.getRequest().getQueryParams()) + .build().toUri().toString(); + } + else { + location = uri.toString(); + } + final ServerHttpResponse response = exchange.getResponse(); - response.getHeaders().set(HttpHeaders.LOCATION, uri.toString()); + response.getHeaders().set(HttpHeaders.LOCATION, location); return response.setComplete(); } return Mono.empty(); @@ -98,7 +125,8 @@ public class RedirectToGatewayFilterFactory else { status = httpStatus.getStatus().toString(); } - return filterToStringCreator(RedirectToGatewayFilterFactory.this).append(status, uri).toString(); + return filterToStringCreator(RedirectToGatewayFilterFactory.this).append(status, uri) + .append(INCLUDE_REQUEST_PARAMS_KEY, includeRequestParams).toString(); } }; } @@ -109,6 +137,8 @@ public class RedirectToGatewayFilterFactory String url; + boolean includeRequestParams; + public String getStatus() { return status; } @@ -125,6 +155,14 @@ public class RedirectToGatewayFilterFactory this.url = url; } + public boolean isIncludeRequestParams() { + return includeRequestParams; + } + + public void setIncludeRequestParams(boolean includeRequestParams) { + this.includeRequestParams = includeRequestParams; + } + } } 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 dfa3ca4d..d3330551 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 @@ -435,6 +435,18 @@ public class GatewayFilterSpec extends UriSpec { return redirect(String.valueOf(status), url.toString()); } + /** + * A filter that will return a redirect response back to the client. + * @param status an HTTP status code, should be a {@code 300} series redirect + * @param url the URL to redirect to. This URL will be set in the {@code location} + * header + * @param includeRequestParams if true, query params will be passed to the url + * @return a {@link GatewayFilterSpec} that can be used to apply additional filters + */ + public GatewayFilterSpec redirect(int status, URI url, boolean includeRequestParams) { + return redirect(String.valueOf(status), url.toString(), includeRequestParams); + } + /** * A filter that will return a redirect response back to the client. * @param status an HTTP status code, should be a {@code 300} series redirect @@ -446,6 +458,18 @@ public class GatewayFilterSpec extends UriSpec { return redirect(String.valueOf(status), url); } + /** + * A filter that will return a redirect response back to the client. + * @param status an HTTP status code, should be a {@code 300} series redirect + * @param url the URL to redirect to. This URL will be set in the {@code location} + * header + * @param includeRequestParams if true, query params will be passed to the url + * @return a {@link GatewayFilterSpec} that can be used to apply additional filters + */ + public GatewayFilterSpec redirect(int status, String url, boolean includeRequestParams) { + return redirect(String.valueOf(status), url, includeRequestParams); + } + /** * A filter that will return a redirect response back to the client. * @param status an HTTP status code, should be a {@code 300} series redirect @@ -454,7 +478,19 @@ 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.toString()); + return redirect(status, url.toString(), false); + } + + /** + * A filter that will return a redirect response back to the client. + * @param status an HTTP status code, should be a {@code 300} series redirect + * @param url the URL to redirect to. This URL will be set in the {@code location} + * header + * @param includeRequestParams if true, query params will be passed to the url + * @return a {@link GatewayFilterSpec} that can be used to apply additional filters + */ + public GatewayFilterSpec redirect(String status, String url, boolean includeRequestParams) { + return filter(getBean(RedirectToGatewayFilterFactory.class).apply(status, url, includeRequestParams)); } /** @@ -476,8 +512,21 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec redirect(HttpStatus status, URL url) { + return redirect(status, url, false); + } + + /** + * A filter that will return a redirect response back to the client. + * @param status an HTTP status code, should be a {@code 300} series redirect + * @param url the URL to redirect to. This URL will be set in the {@code location} + * header + * @param includeRequestParams if true, query params will be passed to the url + * @return a {@link GatewayFilterSpec} that can be used to apply additional filters + */ + public GatewayFilterSpec redirect(HttpStatus status, URL url, boolean includeRequestParams) { try { - return filter(getBean(RedirectToGatewayFilterFactory.class).apply(status, url.toURI())); + return filter( + getBean(RedirectToGatewayFilterFactory.class).apply(status, url.toURI(), includeRequestParams)); } catch (URISyntaxException e) { throw new IllegalArgumentException("Invalid URL", e); 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 f9441fbb..21d8a220 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 @@ -47,6 +47,19 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "https://example.org"); } + @Test + public void redirectToUrlDoesNotPassQueryParametersByDefault() { + testClient.get().uri("/?membership=gold").header("Host", "www.redirectto.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "https://example.org"); + } + + @Test + public void redirectToUrlAddsQueryParametersWhenEnabledOnFilter() { + testClient.get().uri("/?membership=gold").header("Host", "queryparams.redirectto.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader() + .valueEquals(HttpHeaders.LOCATION, "https://example.org?membership=gold"); + } + @Test public void redirectToRelativeUrlFilterWorks() { testClient.get().uri("/").header("Host", "www.relativeredirect.org").exchange().expectStatus() @@ -59,13 +72,27 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); } + @Test + public void redirectToRelativeUrlDoesNotPassQueryParametersByDefault() { + testClient.get().uri("/?membership=gold").header("Host", "www.relativeredirect.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); + } + + @Test + public void redirectToRelativeUrlAddsQueryParametersWhenEnabledOnFilter() { + testClient.get().uri("/?membership=gold").header("Host", "queryparams.relativeredirect.org").exchange() + .expectStatus().isEqualTo(HttpStatus.FOUND).expectHeader() + .valueEquals(HttpHeaders.LOCATION, "/index.html?membership=gold#/customers"); + } + @Test public void toStringFormat() { Config config = new Config(); config.setStatus("301"); config.setUrl("http://newurl"); + config.setIncludeRequestParams(true); GatewayFilter filter = new RedirectToGatewayFilterFactory().apply(config); - assertThat(filter.toString()).contains("301").contains("http://newurl"); + assertThat(filter.toString()).contains("301").contains("http://newurl").contains("true"); } @EnableAutoConfiguration @@ -78,6 +105,9 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { 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_with_query_params", + r -> r.host("queryparams.relativeredirect.org") + .filters(f -> f.redirect(302, "/index.html#/customers", true)).uri("no://op")) .route("relative_redirect", r -> r.host("**.relativeredirect.org") .filters(f -> f.redirect(302, "/index.html#/customers")).uri("no://op")) .build(); diff --git a/spring-cloud-gateway-server/src/test/resources/application.yml b/spring-cloud-gateway-server/src/test/resources/application.yml index 2e5a0571..b031e413 100644 --- a/spring-cloud-gateway-server/src/test/resources/application.yml +++ b/spring-cloud-gateway-server/src/test/resources/application.yml @@ -296,6 +296,14 @@ spring: filters: - SetPath=/anything/{digits} + # ===================================== + - id: redirect_to_include_query_params_test + uri: ${test.uri} + predicates: + - Host=queryparams.redirectto.org + filters: + - RedirectTo=302, https://example.org, true + # ===================================== - id: redirect_to_test uri: ${test.uri} From 1378c1efdef5f75c284bacceb7c31e138fe7d7cc Mon Sep 17 00:00:00 2001 From: Abel Salgado Romero Date: Sat, 2 Dec 2023 22:41:24 +0100 Subject: [PATCH 13/13] Refactor GRPC integration tests maven version configuration (#3158) * Use same GRPC version for SCG runtime and proto code generation. * The protobuf compiler version is set with a version to help bumping. --- spring-cloud-gateway-integration-tests/grpc/pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gateway-integration-tests/grpc/pom.xml b/spring-cloud-gateway-integration-tests/grpc/pom.xml index 99d52d3a..38cffc0b 100644 --- a/spring-cloud-gateway-integration-tests/grpc/pom.xml +++ b/spring-cloud-gateway-integration-tests/grpc/pom.xml @@ -11,6 +11,7 @@ Spring Cloud Gateway gRPC Integration Test + 3.25.1 1.47.1 @@ -97,7 +98,7 @@ kr.motd.maven os-maven-plugin - 1.6.2 + 1.7.1 @@ -112,9 +113,9 @@ protobuf-maven-plugin 0.6.1 - com.google.protobuf:protoc:3.19.4:exe:${os.detected.classifier} + com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier} grpc-java - io.grpc:protoc-gen-grpc-java:1.44.0:exe:${os.detected.classifier} + io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}