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 ab658c83..b813527b 100644 --- a/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -80,37 +80,37 @@ public class GatewayAutoConfiguration { @Bean public GatewayPredicateHandlerMapping gatewayPredicateHandlerMapping(GatewayFilteringWebHandler webHandler, - List predicates, + Map predicates, RouteReader routeReader) { return new GatewayPredicateHandlerMapping(webHandler, predicates, routeReader); } - @Bean + @Bean(name = "CookiePredicateFactory") public CookiePredicateFactory cookiePredicateFactory() { return new CookiePredicateFactory(); } - @Bean + @Bean(name = "HeaderPredicateFactory") public HeaderPredicateFactory headerPredicateFactory() { return new HeaderPredicateFactory(); } - @Bean + @Bean(name = "HostPredicateFactory") public HostPredicateFactory hostPredicateFactory() { return new HostPredicateFactory(); } - @Bean + @Bean(name = "MethodPredicateFactory") public MethodPredicateFactory methodPredicateFactory() { return new MethodPredicateFactory(); } - @Bean + @Bean(name = "QueryPredicateFactory") public QueryPredicateFactory queryPredicateFactory() { return new QueryPredicateFactory(); } - @Bean + @Bean(name = "UrlPredicateFactory") public UrlPredicateFactory urlPredicateFactory() { return new UrlPredicateFactory(); } diff --git a/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateHandlerMapping.java b/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateHandlerMapping.java index 00aa9bbc..6eb3437c 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateHandlerMapping.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/GatewayPredicateHandlerMapping.java @@ -32,26 +32,31 @@ public class GatewayPredicateHandlerMapping extends AbstractHandlerMapping { private List routes; - public GatewayPredicateHandlerMapping(WebHandler webHandler, List predicates, + public GatewayPredicateHandlerMapping(WebHandler webHandler, Map predicates, RouteReader routeReader) { this.webHandler = webHandler; this.routeReader = routeReader; - for (PredicateFactory factory : predicates) { - if (this.predicates.containsKey(factory.getName())) { - this.logger.warn("A PredicateFactory named "+ factory.getName() - + " already exists, class: " + this.predicates.get(factory.getName()) + predicates.forEach((name, factory) -> { + String key = normalizeName(name); + if (this.predicates.containsKey(key)) { + this.logger.warn("A PredicateFactory named "+ key + + " already exists, class: " + this.predicates.get(key) + ". It will be overwritten."); } - this.predicates.put(factory.getName(), factory); + this.predicates.put(key, factory); if (logger.isInfoEnabled()) { - logger.info("Loaded PredicateFactory [" + factory.getName() + "]"); + logger.info("Loaded PredicateFactory [" + key + "]"); } - } + }); setOrder(-1); } + private String normalizeName(String name) { + return name.replace(PredicateFactory.class.getSimpleName(), ""); + } + @Override protected void initApplicationContext() throws BeansException { super.initApplicationContext(); @@ -147,7 +152,7 @@ public class GatewayPredicateHandlerMapping extends AbstractHandlerMapping { args = Collections.emptyList(); } logger.debug("Route " + route.getId() + " applying "+ predicate.getValue() - + ", " + args + " to " + found.getName()); + + ", " + args + " to " + predicate.getName()); } return found.apply(predicate.getValue(), predicate.getArgs()); } diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookiePredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookiePredicateFactory.java index 1560c4a6..9bf46723 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookiePredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookiePredicateFactory.java @@ -12,11 +12,6 @@ import org.springframework.web.server.ServerWebExchange; */ public class CookiePredicateFactory implements PredicateFactory { - @Override - public String getName() { - return "Cookie"; - } - @Override public Predicate apply(String name, String[] args) { //TODO: caching can happen here diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderPredicateFactory.java index 173d1bac..68d0d554 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderPredicateFactory.java @@ -11,11 +11,6 @@ import org.springframework.web.server.ServerWebExchange; */ public class HeaderPredicateFactory implements PredicateFactory { - @Override - public String getName() { - return "Header"; - } - @Override public Predicate apply(String header, String[] args) { //TODO: caching can happen here diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java index c11035c8..e1b389f5 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostPredicateFactory.java @@ -17,11 +17,6 @@ public class HostPredicateFactory implements PredicateFactory { this.pathMatcher = pathMatcher; } - @Override - public String getName() { - return "Host"; - } - @Override public Predicate apply(String pattern, String[] args) { //TODO: caching can happen here 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 index 0704ca53..c8128b08 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodPredicateFactory.java @@ -10,11 +10,6 @@ import org.springframework.web.server.ServerWebExchange; */ public class MethodPredicateFactory implements PredicateFactory { - @Override - public String getName() { - return "Method"; - } - @Override public Predicate apply(String method, String[] args) { //TODO: caching can happen here diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateFactory.java index e69e4237..a8f8a5e7 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateFactory.java @@ -9,7 +9,5 @@ import org.springframework.web.server.ServerWebExchange; */ public interface PredicateFactory { - String getName(); - Predicate apply(String value, String[] args); } diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java index 66864710..e48f1d8a 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryPredicateFactory.java @@ -10,11 +10,6 @@ import org.springframework.web.server.ServerWebExchange; */ public class QueryPredicateFactory implements PredicateFactory { - @Override - public String getName() { - return "Query"; - } - @Override public Predicate apply(String param, String[] args) { //TODO: caching can happen here diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java index 4a3e0679..acad3348 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/UrlPredicateFactory.java @@ -34,11 +34,6 @@ public class UrlPredicateFactory implements PredicateFactory { this.pathHelper = pathHelper; } - @Override - public String getName() { - return "Url"; - } - @Override public Predicate apply(String pattern, String[] args) { return exchange -> {