RequestRateLimiterGatewayFilter
팩토리는 RateLimiter 구현을 사용하여 현재 요청을 진행할 수 있는지 여부를 확인합니다. 그렇지 않은 경우, HTTP 429 - Too Many Request(기본값) 상태가 반환됩니다.
이 필터는 선택적인 keyResolver 매개변수와 처리율 제한기에 특정한 매개변수를 사용합니다.
keyResolver는 KeyResolver 인터페이스를 구현하는 빈입니다. 구성 시 SpEL을 사용하여 이름으로 빈을 참조합니다. #{@myKeyResolver}
는 myKeyResolver라는 이름의 빈을 참조하는 SpEL 표현식입니다. 다음 목록은 KeyResolver 인터페이스를 보여줍니다.
KeyResolver.java
public interface KeyResolver {
Mono<String> resolve(ServerWebExchange exchange);
}
KeyResolver 인터페이스를 사용하면 플러그형 전략을 통해 요청을 제한하기 위한 키를 파생할 수 있습니다. 향후 마일스톤 릴리스에서는 몇 가지 KeyResolver 구현이 추가될 예정입니다.
KeyResolver의 기본 구현은 PrincipalNameKeyResolver로, ServerWebExchange에서 Principal을 검색하고 Principal.getName()을 호출합니다.
기본적으로 KeyResolver가 키를 찾지 못하면 요청이 거부됩니다. spring.cloud.gateway.filter.request-rate-limiter.deny-empty-key
(true 또는 false) 및 spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code
속성을 설정하여 이 동작을 조정할 수 있습니다.
다음 예제에서는 Java에서 KeyResolver
를 구성합니다.
Config.java
@Bean
KeyResolver userKeyResolver() {
return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user"));
}