Merge branch '2.2.x'

This commit is contained in:
spencergibb
2021-03-12 16:07:52 -05:00
3 changed files with 40 additions and 2 deletions

View File

@@ -158,7 +158,7 @@ public class RetryGatewayFilterFactory extends AbstractGatewayFilterFactory<Retr
@Override
public String toString() {
return filterToStringCreator(RetryGatewayFilterFactory.this).append("retries", retryConfig.getRetries())
return filterToStringCreator(RetryGatewayFilterFactory.this).append("routeId", retryConfig.getRouteId()).append("retries", retryConfig.getRetries())
.append("series", retryConfig.getSeries()).append("statuses", retryConfig.getStatuses())
.append("methods", retryConfig.getMethods()).append("exceptions", retryConfig.getExceptions())
.toString();

View File

@@ -169,7 +169,7 @@ public class RouteDefinitionRouteLocator implements RouteLocator {
// TODO: support option to apply defaults after route specific filters?
if (!this.gatewayProperties.getDefaultFilters().isEmpty()) {
filters.addAll(
loadGatewayFilters(DEFAULT_FILTERS, new ArrayList<>(this.gatewayProperties.getDefaultFilters())));
loadGatewayFilters(routeDefinition.getId(), new ArrayList<>(this.gatewayProperties.getDefaultFilters())));
}
if (!routeDefinition.getFilters().isEmpty()) {

View File

@@ -33,6 +33,7 @@ import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFac
import org.springframework.cloud.gateway.filter.factory.AddResponseHeaderGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.RemoveResponseHeaderGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory;
import org.springframework.cloud.gateway.handler.predicate.HostRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
import org.springframework.cloud.gateway.handler.predicate.RoutePredicateFactory;
@@ -108,6 +109,43 @@ public class RouteDefinitionRouteLocatorTests {
}).expectComplete().verify();
}
@Test
public void contextLoadsAndApplyRouteIdToRetryFilter() {
List<RoutePredicateFactory> predicates = Arrays
.asList(new HostRoutePredicateFactory());
List<GatewayFilterFactory> gatewayFilterFactories = Arrays.asList(
new RetryGatewayFilterFactory(),
new AddResponseHeaderGatewayFilterFactory());
GatewayProperties gatewayProperties = new GatewayProperties();
gatewayProperties.setDefaultFilters(Arrays.asList(new FilterDefinition("Retry")));
gatewayProperties.setRoutes(Arrays.asList(new RouteDefinition() {
{
setId("foo");
setUri(URI.create("https://foo.example.com"));
setPredicates(
Arrays.asList(new PredicateDefinition("Host=*.example.com")));
setFilters(Arrays.asList(
new FilterDefinition("AddResponseHeader=X-Response-Foo, Bar")));
}
}));
PropertiesRouteDefinitionLocator routeDefinitionLocator = new PropertiesRouteDefinitionLocator(
gatewayProperties);
@SuppressWarnings("deprecation")
RouteDefinitionRouteLocator routeDefinitionRouteLocator = new RouteDefinitionRouteLocator(
new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)),
predicates, gatewayFilterFactories, gatewayProperties,
new ConfigurationService());
StepVerifier.create(routeDefinitionRouteLocator.getRoutes()).assertNext(route -> {
List<GatewayFilter> filters = route.getFilters();
assertThat(filters).hasSize(2);
assertThat(filters.get(0).toString()).contains("routeId = 'foo'");
assertThat(getFilterClassName(filters.get(0))).contains("Retry");
assertThat(getFilterClassName(filters.get(1))).contains("AddResponseHeader");
}).expectComplete().verify();
}
private List<RouteDefinition> containsInvalidRoutes() {
RouteDefinition foo = new RouteDefinition();
foo.setId("foo");