サービスゲートウェイSpring Cloud Gateway-グローバルフィルタ
2800 ワード
もっと読む
グローバルフィルタGlobal Filter
グローバルフィルタは、条件に応じてすべてのルートに適用されます.設定ファイルに設定する必要はありません.これを用いて、権限認証、IPアクセス制限など、多くの統一化された処理の必要性を実現することができる.
Global Filter内蔵の実現類はあります.
Adapt CachedBodGlobal Filter Integer.MIN_VALE+1000 キャッシュ要求体用フィルタ
WebClient Writes Resonse Filter -1 処理プレフィックスはhttpまたはhttpsのルートです.
NettyWriteResponse Filter -1 処理プレフィックスはhttpまたはhttpsのルートです.
ForwardPathFilter 0
Route Torequest UrlFilter 10000 指定されたurlにルーティングするフィルタ
LoadBalancer ClienntFilter 10100 負荷バランスクライアントフィルタは、プレフィクスがlbであるルートを処理します.
WebsocketRoutingFilter Integer.MAX_VALE-1 処理プレフィックスはwsまたはwsのルーティングである.
WebClient Http RoutingFilter Integer.MAX_VALE 処理プレフィックスはhttpまたはhttpsのルートです.
NettyRoutingFilter Integer.MAX_VALE 処理プレフィックスはhttpまたはhttpsのルートです.
ForwardRoutingFilter Integer.MAX_VALE ルーティングフィルタを転送して、プレフィックスがforwardであるルートを処理します.
グローバルフィルタをカスタマイズ:
グローバルフィルタをカスタマイズするには、Global Filterインターフェースを実現する必要があります.実行順序を指定するなら、同時にOrderedインターフェースを実現できます.
フィルタのBenオブジェクトを定義:
グローバルフィルタGlobal Filter
グローバルフィルタは、条件に応じてすべてのルートに適用されます.設定ファイルに設定する必要はありません.これを用いて、権限認証、IPアクセス制限など、多くの統一化された処理の必要性を実現することができる.
Global Filter内蔵の実現類はあります.
Adapt CachedBodGlobal Filter Integer.MIN_VALE+1000 キャッシュ要求体用フィルタ
WebClient Writes Resonse Filter -1 処理プレフィックスはhttpまたはhttpsのルートです.
NettyWriteResponse Filter -1 処理プレフィックスはhttpまたはhttpsのルートです.
ForwardPathFilter 0
Route Torequest UrlFilter 10000 指定されたurlにルーティングするフィルタ
LoadBalancer ClienntFilter 10100 負荷バランスクライアントフィルタは、プレフィクスがlbであるルートを処理します.
WebsocketRoutingFilter Integer.MAX_VALE-1 処理プレフィックスはwsまたはwsのルーティングである.
WebClient Http RoutingFilter Integer.MAX_VALE 処理プレフィックスはhttpまたはhttpsのルートです.
NettyRoutingFilter Integer.MAX_VALE 処理プレフィックスはhttpまたはhttpsのルートです.
ForwardRoutingFilter Integer.MAX_VALE ルーティングフィルタを転送して、プレフィックスがforwardであるルートを処理します.
グローバルフィルタをカスタマイズ:
グローバルフィルタをカスタマイズするには、Global Filterインターフェースを実現する必要があります.実行順序を指定するなら、同時にOrderedインターフェースを実現できます.
/**
*
*/
//@Component
public class AuthFilter implements GlobalFilter {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("token");
if ("token".equals(token)) {
return chain.filter(exchange);
}
//
Response data = new Response("401", " ");
byte[] dataArr = JSONObject.fromObject(data).toString().getBytes(StandardCharsets.UTF_8);
ServerHttpResponse httpResponse = exchange.getResponse();
DataBuffer dataBuffer = httpResponse.bufferFactory().wrap(dataArr);
httpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
httpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
return httpResponse.writeWith(Mono.just(dataBuffer));
}
}
フィルタのBenオブジェクトを定義:
@Bean
@Order(1)
public AuthFilter getAuthFilter(){
return new AuthFilter();
}