RequestSize 過濾器

當請求大小超過允許的限制時,RequestSize 過濾器可以阻止請求到達下游服務。該過濾器接受一個 maxSize 引數。maxSizeDataSize 型別,因此值可以定義為一個數字後跟一個可選的 DataUnit 字尾,例如 'KB' 或 'MB'。預設單位是位元組 ('B')。這是以位元組為單位定義的請求允許的大小限制。以下配置展示瞭如何配置 RequestSize 過濾器

application.yml
spring:
  cloud:
    gateway:
      mvc:
        routes:
        - id: request_size_route
          uri: https://:8080
          predicates:
          - Path=/upload
          filters:
          - name: RequestSize
            args:
              maxSize: 5000000
GatewaySampleApplication.java
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.uri;
import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.requestSize;
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;

@Configuration
class RouteConfiguration {

    @Bean
    public RouterFunction<ServerResponse> gatewayRouterFunctionsRequestSize() {
        return route("request_size_route")
            .GET("/upload", http())
            .before(uri("https://:8080"))
            .before(requestSize("5000000"))
            .build();
    }
}

當請求因大小而被拒絕時,RequestSize 過濾器將響應狀態設定為 413 Payload Too Large,並附加一個 errorMessage 頭。以下示例展示了這樣的 errorMessage

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB
如果在路由定義中未提供過濾器引數,預設請求大小設定為五 MB。