CacheRequestBody
GatewayFilter
ファクトリ
状況によっては、リクエスト本文を読み取る必要があります。リクエストは一度しか読み取れないため、リクエストボディをキャッシュする必要があります。CacheRequestBody
フィルターを使用して、リクエスト本文をキャッシュしてからダウンストリームに送信し、exchange
属性から本文を取得できます。
次のリストは、リクエスト本文 GatewayFilter
をキャッシュする方法を示しています。
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("cache_request_body_route", r -> r.path("/downstream/**")
.filters(f -> f.prefixPath("/httpbin")
.cacheRequestBody(String.class).uri(uri))
.build();
}
application.yml
spring:
cloud:
gateway:
routes:
- id: cache_request_body_route
uri: lb://downstream
predicates:
- Path=/downstream/**
filters:
- name: CacheRequestBody
args:
bodyClass: java.lang.String
CacheRequestBody
はリクエスト本文を抽出し、本文クラス (前の例で定義された java.lang.String
など) に変換します。次に、CacheRequestBody
は、ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR
で定義されたキーを使用して、ServerWebExchange.getAttributes()
から使用可能な属性にそれを配置します。
このフィルターは、HTTP (HTTPS を含む) リクエストでのみ機能します。 |