From 283604ac15c09b6b5b22c8bacdf08aa940c2904a Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 1 Dec 2016 12:26:43 -0700 Subject: [PATCH] Move to predicate package. Create Method Predicate. --- .../config/GatewayAutoConfiguration.java | 12 ++++++--- ...verWebExchangePredicateHandlerMapping.java | 2 +- .../GatewayPredicateFactory.java | 2 +- .../{ => predicate}/HostPredicateFactory.java | 2 +- .../predicate/MethodPredicateFactory.java | 26 +++++++++++++++++++ .../{ => predicate}/UrlPredicateFactory.java | 2 +- .../gateway/test/GatewayIntegrationTests.java | 3 --- src/test/resources/application.yml | 4 ++- 8 files changed, 42 insertions(+), 11 deletions(-) rename src/main/java/org/springframework/cloud/gateway/handler/{ => predicate}/GatewayPredicateFactory.java (80%) rename src/main/java/org/springframework/cloud/gateway/handler/{ => predicate}/HostPredicateFactory.java (92%) create mode 100644 src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java rename src/main/java/org/springframework/cloud/gateway/handler/{ => predicate}/UrlPredicateFactory.java (94%) diff --git a/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 2c79f65e..45c0abb6 100644 --- a/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -8,11 +8,12 @@ import org.springframework.cloud.gateway.actuate.GatewayEndpoint; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter; import org.springframework.cloud.gateway.handler.GatewayFilteringWebHandler; -import org.springframework.cloud.gateway.handler.HostPredicateFactory; -import org.springframework.cloud.gateway.handler.GatewayPredicateFactory; +import org.springframework.cloud.gateway.handler.predicate.HostPredicateFactory; +import org.springframework.cloud.gateway.handler.predicate.GatewayPredicateFactory; import org.springframework.cloud.gateway.handler.GatewayWebHandler; import org.springframework.cloud.gateway.handler.ServerWebExchangePredicateHandlerMapping; -import org.springframework.cloud.gateway.handler.UrlPredicateFactory; +import org.springframework.cloud.gateway.handler.predicate.MethodPredicateFactory; +import org.springframework.cloud.gateway.handler.predicate.UrlPredicateFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.reactive.ReactorClientHttpConnector; @@ -70,6 +71,11 @@ public class GatewayAutoConfiguration { return new UrlPredicateFactory(); } + @Bean + public MethodPredicateFactory methodPredicateFactory() { + return new MethodPredicateFactory(); + } + @Configuration @ConditionalOnClass(Endpoint.class) protected static class GatewayActuatorConfiguration { diff --git a/src/main/java/org/springframework/cloud/gateway/handler/ServerWebExchangePredicateHandlerMapping.java b/src/main/java/org/springframework/cloud/gateway/handler/ServerWebExchangePredicateHandlerMapping.java index ca2e562d..d333d532 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/ServerWebExchangePredicateHandlerMapping.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/ServerWebExchangePredicateHandlerMapping.java @@ -8,7 +8,7 @@ import java.util.function.Predicate; import org.springframework.beans.BeansException; import org.springframework.cloud.gateway.config.GatewayProperties; import org.springframework.cloud.gateway.config.GatewayProperties.Route; -import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.handler.predicate.GatewayPredicateFactory; import org.springframework.web.reactive.handler.AbstractHandlerMapping; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebHandler; diff --git a/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/GatewayPredicateFactory.java similarity index 80% rename from src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateFactory.java rename to src/main/java/org/springframework/cloud/gateway/handler/predicate/GatewayPredicateFactory.java index 0f050f94..3008fa14 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/GatewayPredicateFactory.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.gateway.handler; +package org.springframework.cloud.gateway.handler.predicate; import org.springframework.web.server.ServerWebExchange; diff --git a/src/main/java/org/springframework/cloud/gateway/handler/HostPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java similarity index 92% rename from src/main/java/org/springframework/cloud/gateway/handler/HostPredicateFactory.java rename to src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java index 80f6c324..d56b1252 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/HostPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.gateway.handler; +package org.springframework.cloud.gateway.handler.predicate; import java.util.function.Predicate; diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java new file mode 100644 index 00000000..eb325c38 --- /dev/null +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java @@ -0,0 +1,26 @@ +package org.springframework.cloud.gateway.handler.predicate; + +import java.util.function.Predicate; + +import org.springframework.http.HttpMethod; +import org.springframework.web.server.ServerWebExchange; + +/** + * @author Spencer Gibb + */ +public class MethodPredicateFactory implements GatewayPredicateFactory { + + @Override + public String getName() { + return "Method"; + } + + @Override + public Predicate create(String method) { + //TODO: caching can happen here + return exchange -> { + HttpMethod requestMethod = exchange.getRequest().getMethod(); + return requestMethod.matches(method); + }; + } +} diff --git a/src/main/java/org/springframework/cloud/gateway/handler/UrlPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java similarity index 94% rename from src/main/java/org/springframework/cloud/gateway/handler/UrlPredicateFactory.java rename to src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java index 447e3c90..cb267b4f 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/UrlPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.gateway.handler; +package org.springframework.cloud.gateway.handler.predicate; import java.util.function.Predicate; diff --git a/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java b/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java index ea928744..e5532d69 100644 --- a/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java +++ b/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java @@ -8,12 +8,9 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.gateway.config.GatewayProperties; import org.springframework.cloud.gateway.config.GatewayProperties.Route; import org.springframework.cloud.gateway.filter.GatewayFilter; -import org.springframework.cloud.gateway.handler.HostPredicateFactory; import org.springframework.cloud.gateway.handler.ServerWebExchangePredicateHandlerMapping; -import org.springframework.cloud.gateway.handler.UrlPredicateFactory; import org.springframework.context.annotation.Bean; import org.springframework.core.annotation.Order; import org.springframework.http.HttpHeaders; diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 8c60ea9e..536e4841 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -17,7 +17,9 @@ spring: - name: Host value: '**.foo.org' - name: Url - value: '/headers' + value: /headers + - name: Method + value: GET # ===================================== - id: default_path_to_httpbin