use of org.springframework.cloud.gateway.route.Route in project spring-cloud-gateway by spring-cloud.
the class FilteringWebHandler method handle.
/* TODO: relocate @EventListener(RefreshRoutesEvent.class)
void handleRefresh() {
this.combinedFiltersForRoute.clear();
}*/
@Override
public Mono<Void> handle(ServerWebExchange exchange) {
Route route = exchange.getRequiredAttribute(GATEWAY_ROUTE_ATTR);
List<GatewayFilter> gatewayFilters = route.getFilters();
List<GatewayFilter> combined = new ArrayList<>(this.globalFilters);
combined.addAll(gatewayFilters);
// TODO: needed or cached?
AnnotationAwareOrderComparator.sort(combined);
logger.debug("Sorted gatewayFilterFactories: " + combined);
return new DefaultGatewayFilterChain(combined).filter(exchange);
}
use of org.springframework.cloud.gateway.route.Route in project spring-cloud-gateway by spring-cloud.
the class RequestRateLimiterGatewayFilterFactory method apply.
@SuppressWarnings("unchecked")
@Override
public GatewayFilter apply(Config config) {
KeyResolver resolver = (config.keyResolver == null) ? defaultKeyResolver : config.keyResolver;
RateLimiter<Object> limiter = (config.rateLimiter == null) ? defaultRateLimiter : config.rateLimiter;
return (exchange, chain) -> {
Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
return resolver.resolve(exchange).flatMap(key -> limiter.isAllowed(route.getId(), key).flatMap(response -> {
if (response.isAllowed()) {
return chain.filter(exchange);
}
exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS);
return exchange.getResponse().setComplete();
}));
};
}
use of org.springframework.cloud.gateway.route.Route in project spring-cloud-gateway by spring-cloud.
the class RouteToRequestUrlFilterTests method testFilter.
private ServerWebExchange testFilter(MockServerHttpRequest request, String url) {
Route value = Route.builder().id("1").uri(URI.create(url)).order(0).predicate(swe -> true).build();
ServerWebExchange exchange = MockServerWebExchange.from(request);
exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, value);
GatewayFilterChain filterChain = mock(GatewayFilterChain.class);
ArgumentCaptor<ServerWebExchange> captor = ArgumentCaptor.forClass(ServerWebExchange.class);
when(filterChain.filter(captor.capture())).thenReturn(Mono.empty());
RouteToRequestUrlFilter filter = new RouteToRequestUrlFilter();
filter.filter(exchange, filterChain);
return captor.getValue();
}
use of org.springframework.cloud.gateway.route.Route in project spring-cloud-gateway by spring-cloud.
the class RedisRateLimiterConfigTests method assertFilter.
private void assertFilter(String key, int replenishRate, int burstCapacity, boolean useDefaultConfig) {
RedisRateLimiter.Config config;
if (useDefaultConfig) {
config = rateLimiter.getDefaultConfig();
} else {
assertThat(rateLimiter.getConfig()).containsKey(key);
config = rateLimiter.getConfig().get(key);
}
assertThat(config).isNotNull();
assertThat(config.getReplenishRate()).isEqualTo(replenishRate);
assertThat(config.getBurstCapacity()).isEqualTo(burstCapacity);
Route route = routeLocator.getRoutes().filter(r -> r.getId().equals(key)).next().block();
assertThat(route).isNotNull();
assertThat(route.getFilters()).hasSize(1);
}
use of org.springframework.cloud.gateway.route.Route in project spring-cloud-gateway by spring-cloud.
the class GatewayFilterSpecTests method testFilter.
private void testFilter(Class<? extends GatewayFilter> type, GatewayFilter gatewayFilter, int order) {
ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class);
Route.Builder routeBuilder = Route.builder().id("123").uri("abc:123").predicate(exchange -> true);
RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes();
GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes);
spec.filter(gatewayFilter);
Route route = routeBuilder.build();
assertThat(route.getFilters()).hasSize(1);
GatewayFilter filter = route.getFilters().get(0);
assertThat(filter).isInstanceOf(type);
Ordered ordered = (Ordered) filter;
assertThat(ordered.getOrder()).isEqualTo(order);
}
Aggregations