Spring Cloud RequestRateLimiter GatewayFilter工厂
RequestRateLimiter
GatewayFilter工厂使用RateLimiter
实现来确定是否允许继续当前请求。如果不是,则返回状态HTTP 429 - Too Many Requests
(默认)。
该过滤器采用一个可选的keyResolver
参数和特定于速率限制器的参数(请参见下文)。
keyResolver
是实现KeyResolver
接口的bean。在配置中,使用SpEL通过名称引用bean。#{@myKeyResolver}
是引用名称为myKeyResolver
的bean的SpEL表达式。
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
(对或错)和spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code
属性来调整此行为。
无法通过“快捷方式”符号配置RequestRateLimiter。以下示例无效
application.properties。
# INVALID SHORTCUT CONFIGURATION spring.cloud.gateway.routes[0].filters[0]=RequestRateLimiter=2, 2, #{@userkeyresolver}
更多建议: