Rename RouteFilter to WebFilterFactory

This commit is contained in:
Spencer Gibb
2017-03-15 10:48:53 -06:00
parent 78db565a2e
commit a97ca9f9f1
38 changed files with 176 additions and 172 deletions

View File

@@ -139,7 +139,7 @@ spring:
This route would match if the request path was, for example: `/foo/1` or `/foo/bar`.
This predicate extracts the URI template variables (like `segment` defined in the example above) as a map of names and values and places it in the `ServerWebExchange.getAttributes()` with a key defined in `PathRoutePredicate.URL_PREDICATE_VARS_ATTR`. Those values are then available for use by <<gateway-route-filters,Route Filters>>
This predicate extracts the URI template variables (like `segment` defined in the example above) as a map of names and values and places it in the `ServerWebExchange.getAttributes()` with a key defined in `PathRoutePredicate.URL_PREDICATE_VARS_ATTR`. Those values are then available for use by <<gateway-route-filters,WebFilter Factorys>>
=== Query Request Predicate Factory
TODO: document Query Request Predicate Factory
@@ -148,51 +148,51 @@ TODO: document Query Request Predicate Factory
TODO: document RemoteAddr Request Predicate Factory
[[gateway-route-filters]]
== Route Filters
== WebFilter Factorys
Route filters allow the modification of the incoming HTTP request or outgoing HTTP response in some manner. Route filters are scoped to a particular route. Spring Cloud Gateway includes many built-in Route Filters.
Route filters allow the modification of the incoming HTTP request or outgoing HTTP response in some manner. Route filters are scoped to a particular route. Spring Cloud Gateway includes many built-in WebFilter Factories.
=== AddRequestHeader Route Filter
TODO: document AddRequestHeader Route Filter
=== AddRequestHeader WebFilter Factory
TODO: document AddRequestHeader WebFilter Factory
=== AddRequestParameter Route Filter
TODO: document AddRequestParameter Route Filter
=== AddRequestParameter WebFilter Factory
TODO: document AddRequestParameter WebFilter Factory
=== AddResponseHeader Route Filter
TODO: document AddResponseHeader Route Filter
=== AddResponseHeader WebFilter Factory
TODO: document AddResponseHeader WebFilter Factory
=== Hystrix Route Filter
TODO: document Hystrix Route Filter
=== Hystrix WebFilter Factory
TODO: document Hystrix WebFilter Factory
=== PrefixPath Route Filter
TODO: document PrefixPath Route Filter
=== PrefixPath WebFilter Factory
TODO: document PrefixPath WebFilter Factory
=== RedirectTo Route Filter
TODO: document RedirectTo Route Filter
=== RedirectTo WebFilter Factory
TODO: document RedirectTo WebFilter Factory
=== RemoveNonProxyHeaders Route Filter
TODO: document RemoveNonProxyHeaders Route Filter
=== RemoveNonProxyHeaders WebFilter Factory
TODO: document RemoveNonProxyHeaders WebFilter Factory
=== RemoveRequestHeader Route Filter
TODO: document RemoveRequestHeader Route Filter
=== RemoveRequestHeader WebFilter Factory
TODO: document RemoveRequestHeader WebFilter Factory
=== RemoveResponseHeader Route Filter
TODO: document RemoveResponseHeader Route Filter
=== RemoveResponseHeader WebFilter Factory
TODO: document RemoveResponseHeader WebFilter Factory
=== RewritePath Route Filter
TODO: document RewritePath Route Filter
=== RewritePath WebFilter Factory
TODO: document RewritePath WebFilter Factory
=== SecureHeaders Route Filter
TODO: document SecureHeaders Route Filter
=== SecureHeaders WebFilter Factory
TODO: document SecureHeaders WebFilter Factory
=== SetPath Route Filter
TODO: document SetPath Route Filter
=== SetPath WebFilter Factory
TODO: document SetPath WebFilter Factory
=== SetResponseHeader Route Filter
TODO: document SetResponseHeader Route Filter
=== SetResponseHeader WebFilter Factory
TODO: document SetResponseHeader WebFilter Factory
=== SetStatus Route Filter
TODO: document SetStatus Route Filter
=== SetStatus WebFilter Factory
TODO: document SetStatus WebFilter Factory
== Global Filters
@@ -214,9 +214,9 @@ TODO: overview of writing custom integrations
TODO: document writing Custom Request Predicate Factorys
=== Writing Custom Route Filters
=== Writing Custom WebFilter Factorys
TODO: document writing Custom Route Filters
TODO: document writing Custom WebFilter Factorys
=== Writing Custom Global Filters

View File

@@ -29,7 +29,7 @@ import org.springframework.cloud.gateway.model.Route;
import org.springframework.cloud.gateway.api.RouteLocator;
import org.springframework.cloud.gateway.api.RouteWriter;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.route.RouteFilter;
import org.springframework.cloud.gateway.filter.route.WebFilterFactory;
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
import org.springframework.cloud.gateway.support.NotFoundException;
import org.springframework.cloud.gateway.support.RefreshRoutesEvent;
@@ -60,18 +60,18 @@ public class GatewayEndpoint implements ApplicationEventPublisherAware {/*extend
private RouteLocator routeLocator;
private List<GlobalFilter> globalFilters;
private List<RouteFilter> routeFilters;
private List<WebFilterFactory> webFilterFactories;
private FilteringWebHandler filteringWebHandler;
private RouteWriter routeWriter;
private ApplicationEventPublisher publisher;
public GatewayEndpoint(RouteLocator routeLocator, List<GlobalFilter> globalFilters,
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler,
List<WebFilterFactory> webFilterFactories, FilteringWebHandler filteringWebHandler,
RouteWriter routeWriter) {
//super("gateway");
this.routeLocator = routeLocator;
this.globalFilters = globalFilters;
this.routeFilters = routeFilters;
this.webFilterFactories = webFilterFactories;
this.filteringWebHandler = filteringWebHandler;
this.routeWriter = routeWriter;
}
@@ -99,7 +99,7 @@ public class GatewayEndpoint implements ApplicationEventPublisherAware {/*extend
@GetMapping("/routefilters")
public Map<String, Object> routefilers() {
return getNamesToOrders(this.routeFilters);
return getNamesToOrders(this.webFilterFactories);
}
private <T> Map<String, Object> getNamesToOrders(List<T> list) {

View File

@@ -33,22 +33,22 @@ import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
import org.springframework.cloud.gateway.filter.NettyRoutingFilter;
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
import org.springframework.cloud.gateway.filter.WriteResponseFilter;
import org.springframework.cloud.gateway.filter.route.AddRequestHeaderRouteFilter;
import org.springframework.cloud.gateway.filter.route.AddRequestParameterRouteFilter;
import org.springframework.cloud.gateway.filter.route.AddResponseHeaderRouteFilter;
import org.springframework.cloud.gateway.filter.route.HystrixRouteFilter;
import org.springframework.cloud.gateway.filter.route.PrefixPathRouteFilter;
import org.springframework.cloud.gateway.filter.route.RedirectToRouteFilter;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersRouteFilter;
import org.springframework.cloud.gateway.filter.route.RemoveRequestHeaderRouteFilter;
import org.springframework.cloud.gateway.filter.route.RemoveResponseHeaderRouteFilter;
import org.springframework.cloud.gateway.filter.route.RewritePathRouteFilter;
import org.springframework.cloud.gateway.filter.route.RouteFilter;
import org.springframework.cloud.gateway.filter.route.AddRequestHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.AddRequestParameterWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.AddResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.HystrixWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.PrefixPathWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.RedirectToWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.RemoveRequestHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.RemoveResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.RewritePathWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.SetResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.WebFilterFactory;
import org.springframework.cloud.gateway.filter.route.SecureHeadersProperties;
import org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter;
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.filter.route.SetPathWebFilterFactory;
import org.springframework.cloud.gateway.filter.route.SetStatusWebFilterFactory;
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
import org.springframework.cloud.gateway.handler.NettyRoutingWebHandler;
import org.springframework.cloud.gateway.handler.RequestPredicateHandlerMapping;
@@ -113,8 +113,8 @@ public class GatewayAutoConfiguration {
@Bean
public FilteringWebHandler filteringWebHandler(GatewayProperties properties, List<GlobalFilter> globalFilters,
List<RouteFilter> routeFilters) {
return new FilteringWebHandler(properties, globalFilters, routeFilters);
List<WebFilterFactory> webFilterFactories) {
return new FilteringWebHandler(properties, globalFilters, webFilterFactories);
}
@Bean
@@ -213,77 +213,77 @@ public class GatewayAutoConfiguration {
// Filter Factory beans
@Bean
public AddRequestHeaderRouteFilter addRequestHeaderRouteFilter() {
return new AddRequestHeaderRouteFilter();
public AddRequestHeaderWebFilterFactory addRequestHeaderWebFilterFactory() {
return new AddRequestHeaderWebFilterFactory();
}
@Bean
public AddRequestParameterRouteFilter addRequestParameterRouteFilter() {
return new AddRequestParameterRouteFilter();
public AddRequestParameterWebFilterFactory addRequestParameterWebFilterFactory() {
return new AddRequestParameterWebFilterFactory();
}
@Bean
public AddResponseHeaderRouteFilter addResponseHeaderRouteFilter() {
return new AddResponseHeaderRouteFilter();
public AddResponseHeaderWebFilterFactory addResponseHeaderWebFilterFactory() {
return new AddResponseHeaderWebFilterFactory();
}
@Configuration
@ConditionalOnClass({HystrixObservableCommand.class, RxReactiveStreams.class})
protected static class HystrixConfiguration {
@Bean
public HystrixRouteFilter hystrixRouteFilter() {
return new HystrixRouteFilter();
public HystrixWebFilterFactory hystrixWebFilterFactory() {
return new HystrixWebFilterFactory();
}
}
@Bean
public PrefixPathRouteFilter prefixPathRouteFilter() {
return new PrefixPathRouteFilter();
public PrefixPathWebFilterFactory prefixPathWebFilterFactory() {
return new PrefixPathWebFilterFactory();
}
@Bean
public RedirectToRouteFilter redirectToRouteFilter() {
return new RedirectToRouteFilter();
public RedirectToWebFilterFactory redirectToWebFilterFactory() {
return new RedirectToWebFilterFactory();
}
@Bean
public RemoveNonProxyHeadersRouteFilter removeNonProxyHeadersRouteFilter() {
return new RemoveNonProxyHeadersRouteFilter();
public RemoveNonProxyHeadersWebFilterFactory removeNonProxyHeadersWebFilterFactory() {
return new RemoveNonProxyHeadersWebFilterFactory();
}
@Bean
public RemoveRequestHeaderRouteFilter removeRequestHeaderRouteFilter() {
return new RemoveRequestHeaderRouteFilter();
public RemoveRequestHeaderWebFilterFactory removeRequestHeaderWebFilterFactory() {
return new RemoveRequestHeaderWebFilterFactory();
}
@Bean
public RemoveResponseHeaderRouteFilter removeResponseHeaderRouteFilter() {
return new RemoveResponseHeaderRouteFilter();
public RemoveResponseHeaderWebFilterFactory removeResponseHeaderWebFilterFactory() {
return new RemoveResponseHeaderWebFilterFactory();
}
@Bean
public RewritePathRouteFilter rewritePathRouteFilter() {
return new RewritePathRouteFilter();
public RewritePathWebFilterFactory rewritePathWebFilterFactory() {
return new RewritePathWebFilterFactory();
}
@Bean
public SetPathRouteFilter setPathRouteFilter() {
return new SetPathRouteFilter();
public SetPathWebFilterFactory setPathWebFilterFactory() {
return new SetPathWebFilterFactory();
}
@Bean
public SecureHeadersRouteFilter secureHeadersRouteFilter(SecureHeadersProperties properties) {
return new SecureHeadersRouteFilter(properties);
public SecureHeadersWebFilterFactory secureHeadersWebFilterFactory(SecureHeadersProperties properties) {
return new SecureHeadersWebFilterFactory(properties);
}
@Bean
public SetResponseHeaderRouteFilter setResponseHeaderRouteFilter() {
return new SetResponseHeaderRouteFilter();
public SetResponseHeaderWebFilterFactory setResponseHeaderWebFilterFactory() {
return new SetResponseHeaderWebFilterFactory();
}
@Bean
public SetStatusRouteFilter setStatusRouteFilter() {
return new SetStatusRouteFilter();
public SetStatusWebFilterFactory setStatusWebFilterFactory() {
return new SetStatusWebFilterFactory();
}
//TODO: control creation
@@ -298,9 +298,9 @@ public class GatewayAutoConfiguration {
@Bean
public GatewayEndpoint gatewayEndpoint(RouteLocator routeLocator, List<GlobalFilter> globalFilters,
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler,
List<WebFilterFactory> webFilterFactories, FilteringWebHandler filteringWebHandler,
RouteWriter routeWriter) {
return new GatewayEndpoint(routeLocator, globalFilters, routeFilters, filteringWebHandler, routeWriter);
return new GatewayEndpoint(routeLocator, globalFilters, webFilterFactories, filteringWebHandler, routeWriter);
}
}

View File

@@ -26,7 +26,7 @@ import javax.validation.constraints.NotNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.gateway.model.FilterDefinition;
import org.springframework.cloud.gateway.model.Route;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersRouteFilter;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersWebFilterFactory;
import static org.springframework.cloud.gateway.support.NameUtils.normalizeFilterName;
@@ -51,7 +51,7 @@ public class GatewayProperties {
private ArrayList<FilterDefinition> loadDefaults() {
ArrayList<FilterDefinition> defaults = new ArrayList<>();
FilterDefinition definition = new FilterDefinition();
definition.setName(normalizeFilterName(RemoveNonProxyHeadersRouteFilter.class));
definition.setName(normalizeFilterName(RemoveNonProxyHeadersWebFilterFactory.class));
defaults.add(definition);
return defaults;
}

View File

@@ -22,7 +22,7 @@ import java.util.Collections;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.gateway.api.RouteLocator;
import org.springframework.cloud.gateway.filter.route.RewritePathRouteFilter;
import org.springframework.cloud.gateway.filter.route.RewritePathWebFilterFactory;
import org.springframework.cloud.gateway.handler.predicate.PathRequestPredicateFactory;
import org.springframework.cloud.gateway.model.FilterDefinition;
import org.springframework.cloud.gateway.model.PredicateDefinition;
@@ -66,7 +66,7 @@ public class DiscoveryClientRouteLocator implements RouteLocator {
// add a filter that removes /serviceId by default
FilterDefinition filter = new FilterDefinition();
filter.setName(normalizeFilterName(RewritePathRouteFilter.class));
filter.setName(normalizeFilterName(RewritePathWebFilterFactory.class));
String regex = "/" + serviceId + "/(?<remaining>.*)";
String replacement = "/${remaining}";
filter.setArgs(regex, replacement);

View File

@@ -23,7 +23,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
/**
* @author Spencer Gibb
*/
public class AddRequestHeaderRouteFilter implements RouteFilter {
public class AddRequestHeaderWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -31,7 +31,7 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public class AddRequestParameterRouteFilter implements RouteFilter {
public class AddRequestParameterWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -22,7 +22,7 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public class AddResponseHeaderRouteFilter implements RouteFilter {
public class AddResponseHeaderWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -33,7 +33,7 @@ import rx.Subscription;
/**
* @author Spencer Gibb
*/
public class HystrixRouteFilter implements RouteFilter {
public class HystrixWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -23,7 +23,7 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public class PrefixPathRouteFilter implements RouteFilter {
public class PrefixPathWebFilterFactory implements WebFilterFactory {
@Override
@SuppressWarnings("unchecked")

View File

@@ -34,7 +34,7 @@ import reactor.core.publisher.Mono;
/**
* @author Spencer Gibb
*/
public class RedirectToRouteFilter implements RouteFilter {
public class RedirectToWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {
validate(2, args);

View File

@@ -44,7 +44,7 @@ import java.util.List;
* @author Spencer Gibb
*/
@ConfigurationProperties("spring.cloud.gateway.filter.removeNonProxyHeaders")
public class RemoveNonProxyHeadersRouteFilter implements RouteFilter {
public class RemoveNonProxyHeadersWebFilterFactory implements WebFilterFactory {
private static final String FAKE_HEADER = "_______force_______";
public static final String[] DEFAULT_HEADERS_TO_REMOVE = new String[] {"Connection", "Keep-Alive",

View File

@@ -23,7 +23,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
/**
* @author Spencer Gibb
*/
public class RemoveRequestHeaderRouteFilter implements RouteFilter {
public class RemoveRequestHeaderWebFilterFactory implements WebFilterFactory {
private static final String FAKE_HEADER = "_______force_______";

View File

@@ -22,7 +22,7 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public class RemoveResponseHeaderRouteFilter implements RouteFilter {
public class RemoveResponseHeaderWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -23,7 +23,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
/**
* @author Spencer Gibb
*/
public class RewritePathRouteFilter implements RouteFilter {
public class RewritePathWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -24,7 +24,7 @@ import org.springframework.web.server.WebFilter;
* https://blog.appcanary.com/2017/http-security-headers.html
* @author Spencer Gibb
*/
public class SecureHeadersRouteFilter implements RouteFilter {
public class SecureHeadersWebFilterFactory implements WebFilterFactory {
public static final String X_XSS_PROTECTION_HEADER = "X-Xss-Protection";
public static final String STRICT_TRANSPORT_SECURITY_HEADER = "Strict-Transport-Security";
@@ -37,7 +37,7 @@ public class SecureHeadersRouteFilter implements RouteFilter {
private final SecureHeadersProperties properties;
public SecureHeadersRouteFilter(SecureHeadersProperties properties) {
public SecureHeadersWebFilterFactory(SecureHeadersProperties properties) {
this.properties = properties;
}

View File

@@ -30,7 +30,7 @@ import static org.springframework.web.reactive.function.server.RouterFunctions.U
/**
* @author Spencer Gibb
*/
public class SetPathRouteFilter implements RouteFilter {
public class SetPathWebFilterFactory implements WebFilterFactory {
@Override
@SuppressWarnings("unchecked")

View File

@@ -22,7 +22,7 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public class SetResponseHeaderRouteFilter implements RouteFilter {
public class SetResponseHeaderWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -28,7 +28,7 @@ import reactor.core.publisher.Mono;
/**
* @author Spencer Gibb
*/
public class SetStatusRouteFilter implements RouteFilter {
public class SetStatusWebFilterFactory implements WebFilterFactory {
@Override
public WebFilter apply(String... args) {

View File

@@ -15,6 +15,7 @@
*
*/
//TODO: move to package factory
package org.springframework.cloud.gateway.filter.route;
import org.springframework.cloud.gateway.support.NameUtils;
@@ -24,8 +25,10 @@ import org.springframework.web.server.WebFilter;
/**
* @author Spencer Gibb
*/
public interface RouteFilter {
@FunctionalInterface
public interface WebFilterFactory {
//TODO: move from String... to Tuple
WebFilter apply(String... args);
default String name() {

View File

@@ -31,11 +31,11 @@ import java.util.stream.Collectors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.cloud.gateway.filter.route.WebFilterFactory;
import org.springframework.cloud.gateway.model.FilterDefinition;
import org.springframework.cloud.gateway.model.Route;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.route.RouteFilter;
import org.springframework.cloud.gateway.support.RefreshRoutesEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.Ordered;
@@ -53,7 +53,7 @@ import reactor.core.publisher.Mono;
/**
* WebHandler that delegates to a chain of {@link GlobalFilter} instances and
* {@link RouteFilter} instances then to the target {@link WebHandler}.
* {@link WebFilterFactory} instances then to the target {@link WebHandler}.
*
* @author Rossen Stoyanchev
* @author Spencer Gibb
@@ -64,21 +64,21 @@ public class FilteringWebHandler extends WebHandlerDecorator {
private final GatewayProperties gatewayProperties;
private final List<GlobalFilter> globalFilters;
private final Map<String, RouteFilter> routeFilters = new HashMap<>();
private final Map<String, WebFilterFactory> webFilterFactories = new HashMap<>();
private final ConcurrentMap<String, List<WebFilter>> combinedFiltersForRoute = new ConcurrentHashMap<>();
public FilteringWebHandler(GatewayProperties gatewayProperties, List<GlobalFilter> globalFilters,
List<RouteFilter> routeFilters) {
this(new EmptyWebHandler(), gatewayProperties, globalFilters, routeFilters);
List<WebFilterFactory> webFilterFactories) {
this(new EmptyWebHandler(), gatewayProperties, globalFilters, webFilterFactories);
}
public FilteringWebHandler(WebHandler targetHandler, GatewayProperties gatewayProperties, List<GlobalFilter> globalFilters,
List<RouteFilter> routeFilters) {
List<WebFilterFactory> webFilterFactories) {
super(targetHandler);
this.gatewayProperties = gatewayProperties;
this.globalFilters = initList(globalFilters);
routeFilters.forEach(routeFilter -> this.routeFilters.put(routeFilter.name(), routeFilter));
webFilterFactories.forEach(factory -> this.webFilterFactories.put(factory.name(), factory));
}
private static <T> List<T> initList(List<T> list) {
@@ -101,11 +101,11 @@ public class FilteringWebHandler extends WebHandlerDecorator {
@Override
public Mono<Void> handle(ServerWebExchange exchange) {
Optional<Route> route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
List<WebFilter> routeFilters = combineFiltersForRoute(route);
List<WebFilter> webFilters = combineFiltersForRoute(route);
logger.debug("Sorted routeFilters: "+ routeFilters);
logger.debug("Sorted webFilterFactories: "+ webFilters);
return new DefaultWebFilterChain(routeFilters, getDelegate()).filter(exchange);
return new DefaultWebFilterChain(webFilters, getDelegate()).filter(exchange);
}
public List<WebFilter> combineFiltersForRoute(Optional<Route> route) {
@@ -149,9 +149,9 @@ public class FilteringWebHandler extends WebHandlerDecorator {
private List<WebFilter> loadWebFilters(String id, List<FilterDefinition> filterDefinitions) {
List<WebFilter> filters = filterDefinitions.stream()
.map(definition -> {
RouteFilter filter = this.routeFilters.get(definition.getName());
WebFilterFactory filter = this.webFilterFactories.get(definition.getName());
if (filter == null) {
throw new IllegalArgumentException("Unable to find RouteFilter with name " + definition.getName());
throw new IllegalArgumentException("Unable to find WebFilterFactory with name " + definition.getName());
}
if (logger.isDebugEnabled()) {
List<String> args;

View File

@@ -28,6 +28,7 @@ import org.springframework.web.reactive.function.server.RequestPredicate;
/**
* @author Spencer Gibb
*/
@FunctionalInterface
public interface RequestPredicateFactory {
RequestPredicate apply(Tuple args);

View File

@@ -17,7 +17,7 @@
package org.springframework.cloud.gateway.support;
import org.springframework.cloud.gateway.filter.route.RouteFilter;
import org.springframework.cloud.gateway.filter.route.WebFilterFactory;
import org.springframework.cloud.gateway.handler.predicate.RequestPredicateFactory;
/**
@@ -34,7 +34,7 @@ public class NameUtils {
return clazz.getSimpleName().replace(RequestPredicateFactory.class.getSimpleName(), "");
}
public static String normalizeFilterName(Class<? extends RouteFilter> clazz) {
return clazz.getSimpleName().replace(RouteFilter.class.getSimpleName(), "");
public static String normalizeFilterName(Class<? extends WebFilterFactory> clazz) {
return clazz.getSimpleName().replace(WebFilterFactory.class.getSimpleName(), "");
}
}

View File

@@ -40,7 +40,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class AddRequestHeaderRouteFilterIntegrationTests extends BaseWebClientTests {
public class AddRequestHeaderWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void addRequestHeaderFilterWorks() {

View File

@@ -40,7 +40,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class AddRequestParameterRouteFilterIntegrationTests extends BaseWebClientTests {
public class AddRequestParameterWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void addRequestParameterFilterWorksBlankQuery() {

View File

@@ -40,7 +40,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class HystrixRouteFilterIntegrationTests extends BaseWebClientTests {
public class HystrixWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void hystrixFilterWorks() {

View File

@@ -40,7 +40,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class RedirectToRouteFilterIntegrationTests extends BaseWebClientTests {
public class RedirectToWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void redirectToFilterWorks() {

View File

@@ -32,7 +32,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
import static org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersRouteFilter.DEFAULT_HEADERS_TO_REMOVE;
import static org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersWebFilterFactory.DEFAULT_HEADERS_TO_REMOVE;
import static org.springframework.cloud.gateway.test.TestUtils.getMap;
import static org.springframework.web.reactive.function.BodyExtractors.toMono;
@@ -44,7 +44,7 @@ import reactor.test.StepVerifier;
//TODO: why does this break other tests if not in a profile?
@ActiveProfiles("removenonproxyheaders")
@DirtiesContext
public class RemoveNonProxyHeadersRouteFilterIntegrationTests extends BaseWebClientTests {
public class RemoveNonProxyHeadersWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void removeNonProxyHeadersFilterWorks() {

View File

@@ -40,7 +40,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class RemoveRequestHeaderRouteFilterIntegrationTests extends BaseWebClientTests {
public class RemoveRequestHeaderWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void removeRequestHeaderFilterWorks() {

View File

@@ -37,7 +37,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class RemoveResponseHeaderRouteFilterIntegrationTests extends BaseWebClientTests {
public class RemoveResponseHeaderWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void removeResponseHeaderFilterWorks() {

View File

@@ -38,7 +38,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class RewritePathRouteFilterIntegrationTests extends BaseWebClientTests {
public class RewritePathWebFilterFactoryIntegrationTests extends BaseWebClientTests {
@Test
public void rewritePathFilterWorks() {

View File

@@ -34,7 +34,7 @@ import static org.mockito.Mockito.when;
/**
* @author Spencer Gibb
*/
public class RewritePathRouteFilterTests {
public class RewritePathWebFilterFactoryTests {
@Test
public void rewritePathFilterWorks() {
@@ -47,7 +47,7 @@ public class RewritePathRouteFilterTests {
}
private void testRewriteFilter(String regex, String replacement, String actualPath, String expectedPath) {
WebFilter filter = new RewritePathRouteFilter().apply(regex, replacement);
WebFilter filter = new RewritePathWebFilterFactory().apply(regex, replacement);
MockServerHttpRequest request = MockServerHttpRequest
.get("http://localhost"+ actualPath)

View File

@@ -32,14 +32,14 @@ import org.springframework.web.reactive.function.client.ClientResponse;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.CONTENT_SECURITY_POLICY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.REFERRER_POLICY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.STRICT_TRANSPORT_SECURITY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.X_CONTENT_TYPE_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.X_DOWNLOAD_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.X_FRAME_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilter.X_XSS_PROTECTION_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.CONTENT_SECURITY_POLICY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.REFERRER_POLICY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.STRICT_TRANSPORT_SECURITY_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.X_CONTENT_TYPE_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.X_DOWNLOAD_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.X_FRAME_OPTIONS_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER;
import static org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactory.X_XSS_PROTECTION_HEADER;
import static org.springframework.cloud.gateway.test.TestUtils.assertStatus;
import reactor.core.publisher.Mono;
@@ -48,7 +48,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class SecureHeadersRouteFilterIntegrationTests extends BaseWebClientTests {
public class SecureHeadersWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void secureHeadersFilterWorks() {

View File

@@ -38,7 +38,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class SetPathRouteFilterIntegrationTests extends BaseWebClientTests {
public class SetPathWebFilterFactoryIntegrationTests extends BaseWebClientTests {
@Test
public void setPathFilterDefaultValuesWork() {

View File

@@ -38,7 +38,7 @@ import reactor.core.publisher.Mono;
/**
* @author Spencer Gibb
*/
public class SetPathRouteFilterTests {
public class SetPathWebFilterFactoryTests {
@Test
public void rewritePathFilterWorks() {
@@ -54,7 +54,7 @@ public class SetPathRouteFilterTests {
}
private void testRewriteFilter(String template, String actualPath, String expectedPath, HashMap<String, String> variables) {
WebFilter filter = new SetPathRouteFilter().apply(new String[]{template});
WebFilter filter = new SetPathWebFilterFactory().apply(new String[]{template});
MockServerHttpRequest request = MockServerHttpRequest
.get("http://localhost"+ actualPath)

View File

@@ -38,7 +38,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class SetResponseRouteFilterIntegrationTests extends BaseWebClientTests {
public class SetResponseWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void setResponseHeaderFilterWorks() {

View File

@@ -38,7 +38,7 @@ import reactor.test.StepVerifier;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@DirtiesContext
public class SetStatusRouteFilterIntegrationTests extends BaseWebClientTests {
public class SetStatusWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void setStatusIntWorks() {

View File

@@ -21,19 +21,19 @@ import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.springframework.cloud.gateway.filter.route.AddRequestHeaderRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.AddRequestParameterRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.HystrixRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RedirectToRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RemoveRequestHeaderRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RewritePathRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RewritePathRouteFilterTests;
import org.springframework.cloud.gateway.filter.route.SecureHeadersRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.SetPathRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.SetPathRouteFilterTests;
import org.springframework.cloud.gateway.filter.route.SetResponseRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.SetStatusRouteFilterIntegrationTests;
import org.springframework.cloud.gateway.filter.route.AddRequestHeaderWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.AddRequestParameterWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.HystrixWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.RedirectToWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.RemoveNonProxyHeadersWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.RemoveRequestHeaderWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.RewritePathWebFilterFactoryIntegrationTests;
import org.springframework.cloud.gateway.filter.route.RewritePathWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.SecureHeadersWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.SetPathWebFilterFactoryIntegrationTests;
import org.springframework.cloud.gateway.filter.route.SetPathWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.SetResponseWebFilterFactoryTests;
import org.springframework.cloud.gateway.filter.route.SetStatusWebFilterFactoryTests;
import org.springframework.cloud.gateway.handler.predicate.AfterRequestPredicateFactoryTests;
import org.springframework.cloud.gateway.handler.predicate.BeforeRequestPredicateFactoryTests;
import org.springframework.cloud.gateway.handler.predicate.BetweenRequestPredicateFactoryTests;
@@ -49,20 +49,20 @@ import org.springframework.cloud.gateway.handler.predicate.PathRequestPredicateF
@SuiteClasses({GatewayIntegrationTests.class,
FormIntegrationTests.class,
// route filter tests
AddRequestHeaderRouteFilterIntegrationTests.class,
AddRequestParameterRouteFilterIntegrationTests.class,
HystrixRouteFilterIntegrationTests.class,
RedirectToRouteFilterIntegrationTests.class,
RemoveNonProxyHeadersRouteFilterIntegrationTests.class,
RemoveRequestHeaderRouteFilterIntegrationTests.class,
RewritePathRouteFilterIntegrationTests.class,
SecureHeadersRouteFilterIntegrationTests.class,
SetPathRouteFilterIntegrationTests.class,
SetPathRouteFilterTests.class,
SetResponseRouteFilterIntegrationTests.class,
SetStatusRouteFilterIntegrationTests.class,
RewritePathRouteFilterTests.class,
// route predicate tests
AddRequestHeaderWebFilterFactoryTests.class,
AddRequestParameterWebFilterFactoryTests.class,
HystrixWebFilterFactoryTests.class,
RedirectToWebFilterFactoryTests.class,
RemoveNonProxyHeadersWebFilterFactoryTests.class,
RemoveRequestHeaderWebFilterFactoryTests.class,
RewritePathWebFilterFactoryIntegrationTests.class,
SecureHeadersWebFilterFactoryTests.class,
SetPathWebFilterFactoryIntegrationTests.class,
SetPathWebFilterFactoryTests.class,
SetResponseWebFilterFactoryTests.class,
SetStatusWebFilterFactoryTests.class,
RewritePathWebFilterFactoryTests.class,
// RequestPredicateFactory tests
AfterRequestPredicateFactoryTests.class,
BeforeRequestPredicateFactoryTests.class,
BetweenRequestPredicateFactoryTests.class,