diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java index c126f180..b5f67523 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/actuate/GatewayEndpoint.java @@ -123,7 +123,7 @@ public class GatewayEndpoint implements ApplicationEventPublisherAware {/*extend } /* -http POST :8080/admin/gateway/routes/apiaddreqhead uri=http://httpbin.org:80 predicates:='["Host=**.apiaddrequestheader.org", "Url=/headers"]' filters:='["AddRequestHeader=X-Request-ApiFoo, ApiBar"]' +http POST :8080/admin/gateway/routes/apiaddreqhead uri=http://httpbin.org:80 predicates:='["Host=**.apiaddrequestheader.org", "Path=/headers"]' filters:='["AddRequestHeader=X-Request-ApiFoo, ApiBar"]' */ @PostMapping("/routes/{id}") public Mono> save(@PathVariable String id, @RequestBody Mono route) { diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 99f250f6..c3f31498 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -59,10 +59,10 @@ import org.springframework.cloud.gateway.handler.predicate.CookieRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.HeaderRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.HostRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.MethodRoutePredicate; +import org.springframework.cloud.gateway.handler.predicate.PathRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.QueryRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.RemoteAddrRoutePredicate; import org.springframework.cloud.gateway.handler.predicate.RoutePredicate; -import org.springframework.cloud.gateway.handler.predicate.UrlRoutePredicate; import org.springframework.cloud.gateway.support.CachingRouteLocator; import org.springframework.cloud.gateway.support.InMemoryRouteRepository; import org.springframework.context.annotation.Bean; @@ -195,6 +195,11 @@ public class GatewayAutoConfiguration { return new MethodRoutePredicate(); } + @Bean(name = "PathRoutePredicate") + public PathRoutePredicate pathRoutePredicate() { + return new PathRoutePredicate(); + } + @Bean(name = "QueryRoutePredicate") public QueryRoutePredicate queryRoutePredicate() { return new QueryRoutePredicate(); @@ -205,12 +210,6 @@ public class GatewayAutoConfiguration { return new RemoteAddrRoutePredicate(); } - - @Bean(name = "UrlRoutePredicate") - public UrlRoutePredicate urlRoutePredicate() { - return new UrlRoutePredicate(); - } - // Filter Factory beans @Bean(name = "AddRequestHeaderRouteFilter") diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteLocator.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteLocator.java index be2c0c37..d2b78ff3 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteLocator.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteLocator.java @@ -25,7 +25,7 @@ import org.springframework.cloud.gateway.api.PredicateDefinition; import org.springframework.cloud.gateway.api.Route; import org.springframework.cloud.gateway.api.RouteLocator; import org.springframework.cloud.gateway.filter.route.RewritePathRouteFilter; -import org.springframework.cloud.gateway.handler.predicate.UrlRoutePredicate; +import org.springframework.cloud.gateway.handler.predicate.PathRoutePredicate; import static org.springframework.cloud.gateway.support.NameUtils.normalizeFilterName; import static org.springframework.cloud.gateway.support.NameUtils.normalizePredicateName; @@ -56,7 +56,7 @@ public class DiscoveryClientRouteLocator implements RouteLocator { // add a predicate that matches the url at /serviceId/** PredicateDefinition predicate = new PredicateDefinition(); - predicate.setName(normalizePredicateName(UrlRoutePredicate.class)); + predicate.setName(normalizePredicateName(PathRoutePredicate.class)); predicate.setArgs("/" + serviceId + "/**"); route.getPredicates().add(predicate); diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilter.java index 3f89aef2..e9811f77 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilter.java @@ -25,7 +25,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.util.UriTemplate; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.getAttribute; -import static org.springframework.cloud.gateway.handler.predicate.UrlRoutePredicate.URL_PREDICATE_VARS_ATTR; +import static org.springframework.cloud.gateway.handler.predicate.PathRoutePredicate.URL_PREDICATE_VARS_ATTR; /** * @author Spencer Gibb diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicate.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicate.java similarity index 91% rename from spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicate.java rename to spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicate.java index 2ca09e56..574fb9fc 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicate.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicate.java @@ -20,19 +20,19 @@ package org.springframework.cloud.gateway.handler.predicate; import java.util.Map; import java.util.function.Predicate; -import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.support.HttpRequestPathHelper; +import org.springframework.web.util.ParsingPathMatcher; /** * @author Spencer Gibb */ -public class UrlRoutePredicate implements RoutePredicate { +public class PathRoutePredicate implements RoutePredicate { public static final String URL_PREDICATE_VARS_ATTR = "urlPredicateVars"; - private PathMatcher pathMatcher = new AntPathMatcher(); + private PathMatcher pathMatcher = new ParsingPathMatcher(); private HttpRequestPathHelper pathHelper = new HttpRequestPathHelper(); public PathMatcher getPathMatcher() { diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterTests.java index 56ac11fe..900dc18e 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterTests.java @@ -22,7 +22,7 @@ import java.util.HashMap; import org.assertj.core.api.Assertions; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.springframework.cloud.gateway.handler.predicate.UrlRoutePredicate; +import org.springframework.cloud.gateway.handler.predicate.PathRoutePredicate; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.http.server.reactive.MockServerHttpResponse; import org.springframework.web.server.ServerWebExchange; @@ -61,7 +61,7 @@ public class SetPathRouteFilterTests { .build(); DefaultServerWebExchange exchange = new DefaultServerWebExchange(request, new MockServerHttpResponse()); - exchange.getAttributes().put(UrlRoutePredicate.URL_PREDICATE_VARS_ATTR, variables); + exchange.getAttributes().put(PathRoutePredicate.URL_PREDICATE_VARS_ATTR, variables); WebFilterChain filterChain = mock(WebFilterChain.class); diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicateIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateIntegrationTests.java similarity index 95% rename from spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicateIntegrationTests.java rename to spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateIntegrationTests.java index 5052de66..4d39ee8a 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/UrlRoutePredicateIntegrationTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateIntegrationTests.java @@ -41,10 +41,10 @@ import reactor.test.StepVerifier; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @DirtiesContext -public class UrlRoutePredicateIntegrationTests extends BaseWebClientTests { +public class PathRoutePredicateIntegrationTests extends BaseWebClientTests { @Test - public void urlRouteWorks() { + public void pathRouteWorks() { Mono result = webClient.get() .uri("/get") .exchange(); diff --git a/spring-cloud-gateway-core/src/test/resources/application-removenonproxyheaders.yml b/spring-cloud-gateway-core/src/test/resources/application-removenonproxyheaders.yml index 2d737550..6ecc3264 100644 --- a/spring-cloud-gateway-core/src/test/resources/application-removenonproxyheaders.yml +++ b/spring-cloud-gateway-core/src/test/resources/application-removenonproxyheaders.yml @@ -10,7 +10,7 @@ spring: uri: http://httpbin.org:80 predicates: - Host=**.removerequestheader.org - - Url=/headers + - Path=/headers filters: - RemoveRequestHeader=X-Request-Foo diff --git a/spring-cloud-gateway-core/src/test/resources/application.yml b/spring-cloud-gateway-core/src/test/resources/application.yml index bd00457e..09a353d0 100644 --- a/spring-cloud-gateway-core/src/test/resources/application.yml +++ b/spring-cloud-gateway-core/src/test/resources/application.yml @@ -19,7 +19,7 @@ spring: uri: ${test.uri} predicates: - Host=**.foo.org - - Url=/headers + - Path=/headers - Method=GET - Header=X-Request-Id, \d+ - Query=foo, ba. @@ -34,7 +34,7 @@ spring: uri: ${test.uri} predicates: - Host=**.addrequestheader.org - - Url=/headers + - Path=/headers filters: - AddRequestHeader=X-Request-Foo, Bar @@ -43,7 +43,7 @@ spring: uri: ${test.uri} predicates: - Host=**.addrequestparameter.org - - Url=/get + - Path=/get filters: - AddRequestParameter=foo, bar @@ -52,7 +52,7 @@ spring: uri: ${test.uri} predicates: - Host=**.addresponseheader.org - - Url=/headers + - Path=/headers filters: - AddResponseHeader=X-Request-Foo, Bar @@ -91,7 +91,7 @@ spring: uri: ${test.uri} predicates: - Host=**.removerequestheader.org - - Url=/headers + - Path=/headers filters: - RemoveRequestHeader=X-Request-Foo @@ -100,7 +100,7 @@ spring: uri: ${test.uri} predicates: - Host=**.removereresponseheader.org - - Url=/headers + - Path=/headers filters: - AddResponseHeader=X-Request-Foo, Bar - RemoveResponseHeader=X-Request-Foo @@ -110,7 +110,7 @@ spring: uri: ${test.uri} predicates: - Host=**.secureheaders.org - - Url=/headers + - Path=/headers filters: - SecureHeaders @@ -119,7 +119,7 @@ spring: uri: ${test.uri} predicates: - Host=**.setpath.org - - Url=/foo/{segment} + - Path=/foo/{segment} filters: - SetPath=/{segment} @@ -128,7 +128,7 @@ spring: uri: ${test.uri} predicates: - Host=**.setreresponseheader.org - - Url=/headers + - Path=/headers filters: - AddResponseHeader=X-Request-Foo, Bar1 - AddResponseHeader=X-Request-Foo, Bar2 @@ -139,7 +139,7 @@ spring: uri: ${test.uri} predicates: - Host=**.setstatusint.org - - Url=/headers + - Path=/headers filters: - name: SetStatus args: 401 @@ -149,7 +149,7 @@ spring: uri: ${test.uri} predicates: - Host=**.setstatusstring.org - - Url=/headers + - Path=/headers filters: - SetStatus=BAD_REQUEST @@ -169,7 +169,7 @@ spring: - id: default_path_to_httpbin uri: ${test.uri} predicates: - - name: Url + - name: Path args: /** myservice: diff --git a/spring-cloud-gateway-core/src/main/resources/application.yml b/spring-cloud-gateway-sample/src/main/resources/application.yml similarity index 93% rename from spring-cloud-gateway-core/src/main/resources/application.yml rename to spring-cloud-gateway-sample/src/main/resources/application.yml index ef6d63ad..1714f7af 100644 --- a/spring-cloud-gateway-core/src/main/resources/application.yml +++ b/spring-cloud-gateway-sample/src/main/resources/application.yml @@ -14,8 +14,7 @@ spring: - id: default_path_to_httpbin uri: ${test.uri} predicates: - - name: Url - args: /** + - Path=/** logging: level: