From 26cff62bf481ce0ab39fd889fabda03a9f371684 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Tue, 21 Dec 2021 12:15:28 -0500 Subject: [PATCH] Allow RoutePredicateHandlerMapping customization Allow bean overriding and add a property to set the order. spring.cloud.gateway.handler-mapping.order=1 Fixes gh-2469 --- .../cloud/gateway/config/GatewayAutoConfiguration.java | 1 + .../cloud/gateway/handler/RoutePredicateHandlerMapping.java | 3 ++- .../META-INF/additional-spring-configuration-metadata.json | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index ca9e43f1..2527e377 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -251,6 +251,7 @@ public class GatewayAutoConfiguration { } @Bean + @ConditionalOnMissingBean public RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler, RouteLocator routeLocator, GlobalCorsProperties globalCorsProperties, Environment environment) { return new RoutePredicateHandlerMapping(webHandler, routeLocator, globalCorsProperties, environment); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java index 9a8f160b..39b89197 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java @@ -20,6 +20,7 @@ import java.util.function.Function; import reactor.core.publisher.Mono; +import org.springframework.cloud.gateway.config.GatewayProperties; import org.springframework.cloud.gateway.config.GlobalCorsProperties; import org.springframework.cloud.gateway.route.Route; import org.springframework.cloud.gateway.route.RouteLocator; @@ -55,7 +56,7 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { this.managementPort = getPortProperty(environment, "management.server."); this.managementPortType = getManagementPortType(environment); - setOrder(1); + setOrder(environment.getProperty(GatewayProperties.PREFIX + ".handler-mapping.order", Integer.class, 1)); setCorsConfigurations(globalCorsProperties.getCorsConfigurations()); } diff --git a/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b9d48430..0e159b86 100644 --- a/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-gateway-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -359,6 +359,12 @@ "type": "java.lang.Boolean", "description": "If global CORS config should be added to the URL handler.", "defaultValue": "false" + }, + { + "name": "spring.cloud.gateway.handler-mapping.order", + "type": "java.lang.Integer", + "description": "The order of RoutePredicateHandlerMapping.", + "defaultValue": "1" } ] }