diff --git a/src/main/java/org/springframework/cloud/gateway/GatewayFilter.java b/src/main/java/org/springframework/cloud/gateway/GatewayFilter.java index 237725c37..ad8b632f2 100644 --- a/src/main/java/org/springframework/cloud/gateway/GatewayFilter.java +++ b/src/main/java/org/springframework/cloud/gateway/GatewayFilter.java @@ -31,6 +31,9 @@ import reactor.core.publisher.Mono; */ public interface GatewayFilter { + String GATEWAY_ROUTE_ATTR = "gatewayRoute"; + String GATEWAY_REQUEST_URL_ATTR = "requestUrl"; + default boolean shouldFilter(ServerWebExchange exchange) { return true; } diff --git a/src/main/java/org/springframework/cloud/gateway/GatewayHostHandlerMapping.java b/src/main/java/org/springframework/cloud/gateway/GatewayHostHandlerMapping.java index 822a001e0..216cfdf8c 100644 --- a/src/main/java/org/springframework/cloud/gateway/GatewayHostHandlerMapping.java +++ b/src/main/java/org/springframework/cloud/gateway/GatewayHostHandlerMapping.java @@ -18,6 +18,8 @@ import org.springframework.web.server.WebHandler; import reactor.core.publisher.Mono; +import static org.springframework.cloud.gateway.GatewayFilter.GATEWAY_ROUTE_ATTR; + /** * @author Spencer Gibb */ @@ -123,7 +125,7 @@ public class GatewayHostHandlerMapping extends AbstractHandlerMapping { if (handler instanceof RouteHolder) { RouteHolder holder = (RouteHolder) handler; - exchange.getAttributes().put("gatewayRoute", holder.route); + exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, holder.route); return holder.webHandler; } diff --git a/src/main/java/org/springframework/cloud/gateway/GatewayUrlHandlerMapping.java b/src/main/java/org/springframework/cloud/gateway/GatewayUrlHandlerMapping.java index 697b49d81..64e19cab9 100644 --- a/src/main/java/org/springframework/cloud/gateway/GatewayUrlHandlerMapping.java +++ b/src/main/java/org/springframework/cloud/gateway/GatewayUrlHandlerMapping.java @@ -34,7 +34,7 @@ public class GatewayUrlHandlerMapping extends AbstractUrlHandlerMapping { return super.getHandler(exchange).map(o -> { if (o instanceof RouteHolder) { RouteHolder holder = (RouteHolder) o; - exchange.getAttributes().put("gatewayRoute", holder.route); + exchange.getAttributes().put(GatewayFilter.GATEWAY_ROUTE_ATTR, holder.route); return holder.webHandler; } return o; diff --git a/src/main/java/org/springframework/cloud/gateway/GatewayWebHandler.java b/src/main/java/org/springframework/cloud/gateway/GatewayWebHandler.java index f605e244e..58a11ee5e 100644 --- a/src/main/java/org/springframework/cloud/gateway/GatewayWebHandler.java +++ b/src/main/java/org/springframework/cloud/gateway/GatewayWebHandler.java @@ -13,6 +13,8 @@ import reactor.core.publisher.Mono; import java.net.URI; import java.util.Optional; +import static org.springframework.cloud.gateway.GatewayFilter.GATEWAY_REQUEST_URL_ATTR; + /** * @author Spencer Gibb */ @@ -28,8 +30,7 @@ public class GatewayWebHandler implements WebHandler { @Override public Mono handle(ServerWebExchange exchange) { - //TODO: move to constant - Optional requestUrl = exchange.getAttribute("requestUrl"); + Optional requestUrl = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); ServerHttpRequest request = exchange.getRequest(); ClientRequest clientRequest = ClientRequest .method(request.getMethod(), requestUrl.get()) diff --git a/src/main/java/org/springframework/cloud/gateway/filters/RouteToUrlFilter.java b/src/main/java/org/springframework/cloud/gateway/filters/RouteToUrlFilter.java index db8208521..4399a60d7 100644 --- a/src/main/java/org/springframework/cloud/gateway/filters/RouteToUrlFilter.java +++ b/src/main/java/org/springframework/cloud/gateway/filters/RouteToUrlFilter.java @@ -20,6 +20,7 @@ import reactor.core.publisher.Mono; public class RouteToUrlFilter implements GatewayFilter, Ordered { private static final Log log = LogFactory.getLog(RouteToUrlFilter.class); + public static final int ROUTE_TO_URL_FILTER_ORDER = 500; private final GatewayProperties properties; @@ -29,23 +30,21 @@ public class RouteToUrlFilter implements GatewayFilter, Ordered { @Override public int getOrder() { - // TODO: move to constant - return 500; + return ROUTE_TO_URL_FILTER_ORDER; } // TODO: do we really need shouldFilter or just move the if into filter? @Override public boolean shouldFilter(ServerWebExchange exchange) { - //TODO: move to constant - return exchange.getAttributes().containsKey("gatewayRoute"); + return exchange.getAttributes().containsKey(GATEWAY_ROUTE_ATTR); } @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { log.info("RouteToUrlFilter start"); - Object gatewayRoute = exchange.getAttributes().get("gatewayRoute"); + Object gatewayRoute = exchange.getAttributes().get(GATEWAY_ROUTE_ATTR); if (!(gatewayRoute instanceof Route)) { - return Mono.error(new IllegalStateException("gatewayRoute" + + return Mono.error(new IllegalStateException(GATEWAY_ROUTE_ATTR + " not an instance of " + Route.class.getSimpleName() + ", is " + gatewayRoute.getClass())); } @@ -54,8 +53,7 @@ public class RouteToUrlFilter implements GatewayFilter, Ordered { .uri(route.getDownstreamUrl()) .build(true) .toUri(); - //TODO: move to constant - exchange.getAttributes().put("requestUrl", requestUrl); + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl); return chain.filter(exchange); }