polish and renaming
This commit is contained in:
@@ -2,7 +2,7 @@ package org.springframework.cloud.gateway.actuate;
|
||||
|
||||
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -15,9 +15,9 @@ import java.util.Map;
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "endpoints.gateway")
|
||||
public class GatewayEndpoint extends AbstractEndpoint<Map<String, Object>> {
|
||||
private List<GatewayFilter> filters;
|
||||
private List<GlobalFilter> filters;
|
||||
|
||||
public GatewayEndpoint(List<GatewayFilter> filters) {
|
||||
public GatewayEndpoint(List<GlobalFilter> filters) {
|
||||
super("gateway");
|
||||
this.filters = filters;
|
||||
AnnotationAwareOrderComparator.sort(this.filters);
|
||||
@@ -28,7 +28,7 @@ public class GatewayEndpoint extends AbstractEndpoint<Map<String, Object>> {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
|
||||
ArrayList<String> filterNames = new ArrayList<>();
|
||||
for (GatewayFilter filter : this.filters) {
|
||||
for (GlobalFilter filter : this.filters) {
|
||||
filterNames.add(filter.getClass().getName());
|
||||
}
|
||||
map.put("filters", filterNames);
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cloud.gateway.actuate.GatewayEndpoint;
|
||||
import org.springframework.cloud.gateway.api.RouteReader;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
|
||||
import org.springframework.cloud.gateway.filter.WriteResponseFilter;
|
||||
import org.springframework.cloud.gateway.filter.route.AddRequestHeaderRouteFilter;
|
||||
@@ -21,9 +21,9 @@ import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
||||
import org.springframework.cloud.gateway.filter.route.SetPathRouteFilter;
|
||||
import org.springframework.cloud.gateway.filter.route.SetResponseHeaderRouteFilter;
|
||||
import org.springframework.cloud.gateway.filter.route.SetStatusRouteFilter;
|
||||
import org.springframework.cloud.gateway.handler.GatewayFilteringWebHandler;
|
||||
import org.springframework.cloud.gateway.handler.GatewayPredicateHandlerMapping;
|
||||
import org.springframework.cloud.gateway.handler.GatewayWebHandler;
|
||||
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
|
||||
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
|
||||
import org.springframework.cloud.gateway.handler.WebClientRoutingWebHandler;
|
||||
import org.springframework.cloud.gateway.handler.predicate.CookieRoutePredicate;
|
||||
import org.springframework.cloud.gateway.handler.predicate.HeaderRoutePredicate;
|
||||
import org.springframework.cloud.gateway.handler.predicate.HostRoutePredicate;
|
||||
@@ -61,25 +61,25 @@ public class GatewayAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GatewayWebHandler gatewayWebHandler(WebClient webClient) {
|
||||
return new GatewayWebHandler(webClient);
|
||||
public WebClientRoutingWebHandler webClientRoutingWebHandler(WebClient webClient) {
|
||||
return new WebClientRoutingWebHandler(webClient);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GatewayFilteringWebHandler gatewayFilteringWebHandler(GatewayWebHandler webHandler,
|
||||
List<GatewayFilter> gatewayFilters,
|
||||
Map<String, RouteFilter> routeFilters) {
|
||||
return new GatewayFilteringWebHandler(webHandler, gatewayFilters, routeFilters);
|
||||
public FilteringWebHandler filteringWebHandler(WebClientRoutingWebHandler webHandler,
|
||||
List<GlobalFilter> globalFilters,
|
||||
Map<String, RouteFilter> routeFilters) {
|
||||
return new FilteringWebHandler(webHandler, globalFilters, routeFilters);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GatewayPredicateHandlerMapping gatewayPredicateHandlerMapping(GatewayFilteringWebHandler webHandler,
|
||||
Map<String, RoutePredicate> predicates,
|
||||
RouteReader routeReader) {
|
||||
return new GatewayPredicateHandlerMapping(webHandler, predicates, routeReader);
|
||||
public RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler,
|
||||
Map<String, RoutePredicate> predicates,
|
||||
RouteReader routeReader) {
|
||||
return new RoutePredicateHandlerMapping(webHandler, predicates, routeReader);
|
||||
}
|
||||
|
||||
// GatewayFilter beans
|
||||
// GlobalFilter beans
|
||||
|
||||
@Bean
|
||||
public RouteToRequestUrlFilter routeToRequestUrlFilter() {
|
||||
@@ -170,7 +170,7 @@ public class GatewayAutoConfiguration {
|
||||
protected static class GatewayActuatorConfiguration {
|
||||
|
||||
@Bean
|
||||
public GatewayEndpoint gatewayEndpoint(List<GatewayFilter> filters) {
|
||||
public GatewayEndpoint gatewayEndpoint(List<GlobalFilter> filters) {
|
||||
return new GatewayEndpoint(filters);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import reactor.core.publisher.Mono;
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 5.0
|
||||
*/
|
||||
public interface GatewayFilter {
|
||||
public interface GlobalFilter {
|
||||
|
||||
/**
|
||||
* Process the Web request and (optionally) delegate to the next
|
||||
@@ -18,7 +18,7 @@ import reactor.core.publisher.Mono;
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public class RouteToRequestUrlFilter implements GatewayFilter, Ordered {
|
||||
public class RouteToRequestUrlFilter implements GlobalFilter, Ordered {
|
||||
|
||||
private static final Log log = LogFactory.getLog(RouteToRequestUrlFilter.class);
|
||||
public static final int ROUTE_TO_URL_FILTER_ORDER = 10000;
|
||||
|
||||
@@ -19,7 +19,7 @@ import reactor.core.publisher.Mono;
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public class WriteResponseFilter implements GatewayFilter, Ordered {
|
||||
public class WriteResponseFilter implements GlobalFilter, Ordered {
|
||||
|
||||
private static final Log log = LogFactory.getLog(WriteResponseFilter.class);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.cloud.gateway.config.Route;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||
@@ -45,22 +45,23 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
/**
|
||||
* WebHandler that delegates to a chain of {@link GatewayFilter} instances and then
|
||||
* to the target {@link WebHandler}.
|
||||
* WebHandler that delegates to a chain of {@link GlobalFilter} instances and
|
||||
* {@link RouteFilter} instances then to the target {@link WebHandler}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 5.0
|
||||
* @author Spencer Gibb
|
||||
* @since 0.1
|
||||
*/
|
||||
public class GatewayFilteringWebHandler extends WebHandlerDecorator {
|
||||
public class FilteringWebHandler extends WebHandlerDecorator {
|
||||
protected final Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
private final List<GatewayFilter> filters;
|
||||
private final List<GlobalFilter> globalFilters;
|
||||
private final Map<String, RouteFilter> routeFilters = new HashMap<>();
|
||||
|
||||
public GatewayFilteringWebHandler(WebHandler targetHandler, List<GatewayFilter> filters,
|
||||
Map<String, RouteFilter> routeFilters) {
|
||||
public FilteringWebHandler(WebHandler targetHandler, List<GlobalFilter> globalFilters,
|
||||
Map<String, RouteFilter> routeFilters) {
|
||||
super(targetHandler);
|
||||
this.filters = initList(filters);
|
||||
this.globalFilters = initList(globalFilters);
|
||||
routeFilters.forEach((name, def) -> this.routeFilters.put(nornamlizeName(name), def));
|
||||
}
|
||||
|
||||
@@ -73,16 +74,16 @@ public class GatewayFilteringWebHandler extends WebHandlerDecorator {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a read-only list of the configured filters.
|
||||
* Return a read-only list of the configured globalFilters.
|
||||
*/
|
||||
public List<GatewayFilter> getFilters() {
|
||||
return this.filters;
|
||||
public List<GlobalFilter> getGlobalFilters() {
|
||||
return this.globalFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> handle(ServerWebExchange exchange) {
|
||||
//TODO: probably a java 8 stream way of doing this
|
||||
ArrayList<WebFilter> routeFilters = new ArrayList<>(loadGatewayFilters(this.filters));
|
||||
ArrayList<WebFilter> routeFilters = new ArrayList<>(loadFilters(this.globalFilters));
|
||||
|
||||
Optional<Route> route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
|
||||
if (route.isPresent() && !route.get().getFilters().isEmpty()) {
|
||||
@@ -94,10 +95,10 @@ public class GatewayFilteringWebHandler extends WebHandlerDecorator {
|
||||
return new DefaultWebFilterChain(routeFilters, getDelegate()).filter(exchange);
|
||||
}
|
||||
|
||||
private Collection<WebFilter> loadGatewayFilters(List<GatewayFilter> filters) {
|
||||
private Collection<WebFilter> loadFilters(List<GlobalFilter> filters) {
|
||||
return filters.stream()
|
||||
.map(filter -> {
|
||||
GatewayWebFilter webFilter = new GatewayWebFilter(filter);
|
||||
WebFilterAdapter webFilter = new WebFilterAdapter(filter);
|
||||
if (filter instanceof Ordered) {
|
||||
int order = ((Ordered) filter).getOrder();
|
||||
return new OrderedWebFilter(webFilter, order);
|
||||
@@ -135,11 +136,11 @@ public class GatewayFilteringWebHandler extends WebHandlerDecorator {
|
||||
return ordered;
|
||||
}
|
||||
|
||||
private static class GatewayWebFilter implements WebFilter {
|
||||
private static class WebFilterAdapter implements WebFilter {
|
||||
|
||||
private final GatewayFilter delegate;
|
||||
private final GlobalFilter delegate;
|
||||
|
||||
public GatewayWebFilter(GatewayFilter delegate) {
|
||||
public WebFilterAdapter(GlobalFilter delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@@ -150,7 +151,7 @@ public class GatewayFilteringWebHandler extends WebHandlerDecorator {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("GatewayWebFilter{");
|
||||
final StringBuilder sb = new StringBuilder("WebFilterAdapter{");
|
||||
sb.append("delegate=").append(delegate);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
@@ -24,7 +24,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public class GatewayPredicateHandlerMapping extends AbstractHandlerMapping {
|
||||
public class RoutePredicateHandlerMapping extends AbstractHandlerMapping {
|
||||
|
||||
private Map<String, RoutePredicate> predicates = new LinkedHashMap<>();
|
||||
private RouteReader routeReader;
|
||||
@@ -32,8 +32,8 @@ public class GatewayPredicateHandlerMapping extends AbstractHandlerMapping {
|
||||
|
||||
private List<Route> routes;
|
||||
|
||||
public GatewayPredicateHandlerMapping(WebHandler webHandler, Map<String, RoutePredicate> predicates,
|
||||
RouteReader routeReader) {
|
||||
public RoutePredicateHandlerMapping(WebHandler webHandler, Map<String, RoutePredicate> predicates,
|
||||
RouteReader routeReader) {
|
||||
this.webHandler = webHandler;
|
||||
this.routeReader = routeReader;
|
||||
|
||||
@@ -18,11 +18,11 @@ import reactor.core.publisher.Mono;
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
public class GatewayWebHandler implements WebHandler {
|
||||
public class WebClientRoutingWebHandler implements WebHandler {
|
||||
|
||||
private final WebClient webClient;
|
||||
|
||||
public GatewayWebHandler(WebClient webClient) {
|
||||
public WebClientRoutingWebHandler(WebClient webClient) {
|
||||
this.webClient = webClient;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ 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.Route;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.handler.GatewayPredicateHandlerMapping;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -142,7 +142,7 @@ public class GatewayIntegrationTests {
|
||||
HttpHeaders httpHeaders = response.headers().asHttpHeaders();
|
||||
HttpStatus statusCode = response.statusCode();
|
||||
assertThat(httpHeaders.getFirst(HANDLER_MAPPER_HEADER))
|
||||
.isEqualTo(GatewayPredicateHandlerMapping.class.getSimpleName());
|
||||
.isEqualTo(RoutePredicateHandlerMapping.class.getSimpleName());
|
||||
assertThat(httpHeaders.getFirst(ROUTE_ID_HEADER))
|
||||
.isEqualTo("host_foo_path_headers_to_httpbin");
|
||||
assertThat(httpHeaders.getFirst("X-Response-Foo"))
|
||||
@@ -169,7 +169,7 @@ public class GatewayIntegrationTests {
|
||||
HttpHeaders httpHeaders = response.headers().asHttpHeaders();
|
||||
HttpStatus statusCode = response.statusCode();
|
||||
assertThat(httpHeaders.getFirst(HANDLER_MAPPER_HEADER))
|
||||
.isEqualTo(GatewayPredicateHandlerMapping.class.getSimpleName());
|
||||
.isEqualTo(RoutePredicateHandlerMapping.class.getSimpleName());
|
||||
assertThat(httpHeaders.getFirst(ROUTE_ID_HEADER))
|
||||
.isEqualTo("host_example_to_httpbin");
|
||||
assertThat(statusCode).isEqualTo(HttpStatus.OK);
|
||||
@@ -342,7 +342,7 @@ public class GatewayIntegrationTests {
|
||||
HttpHeaders httpHeaders = response.headers().asHttpHeaders();
|
||||
HttpStatus statusCode = response.statusCode();
|
||||
assertThat(httpHeaders.getFirst(HANDLER_MAPPER_HEADER))
|
||||
.isEqualTo(GatewayPredicateHandlerMapping.class.getSimpleName());
|
||||
.isEqualTo(RoutePredicateHandlerMapping.class.getSimpleName());
|
||||
assertThat(httpHeaders.getFirst(ROUTE_ID_HEADER))
|
||||
.isEqualTo("default_path_to_httpbin");
|
||||
assertThat(statusCode).isEqualTo(HttpStatus.OK);
|
||||
@@ -360,7 +360,7 @@ public class GatewayIntegrationTests {
|
||||
|
||||
@Bean
|
||||
@Order(500)
|
||||
public GatewayFilter modifyResponseFilter() {
|
||||
public GlobalFilter modifyResponseFilter() {
|
||||
return (exchange, chain) -> {
|
||||
log.info("modifyResponseFilter start");
|
||||
String value = (String) exchange.getAttribute(GATEWAY_HANDLER_MAPPER_ATTR).orElse("N/A");
|
||||
@@ -375,7 +375,7 @@ public class GatewayIntegrationTests {
|
||||
|
||||
@Bean
|
||||
@Order(-1)
|
||||
public GatewayFilter postFilter() {
|
||||
public GlobalFilter postFilter() {
|
||||
return (exchange, chain) -> {
|
||||
log.info("postFilter start");
|
||||
return chain.filter(exchange).then(postFilterWork(exchange));
|
||||
|
||||
Reference in New Issue
Block a user