サービスゲートウェイ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インターフェースを実現できます.
/**
 *      
 */
//@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();
}