Spring Coud Alibababa学習ノート(21)-Spring Coud Gatewayカスタムグローバルフィルタ
1932 ワード
上記では、Spring Cloud Gatewayによるグローバルフィルタの一連の内蔵を紹介しましたが、ここではグローバルフィルタのカスタマイズ方法を紹介します.
グローバルフィルタリングをカスタマイズするには、Global Filterインターフェースを実現する必要があります.このインターフェースはGatewayFilterと同じ方法で定義されていますが、Global Filterの例は全てのルートに作用します.
グローバルフィルタをカスタマイズ
グローバルフィルタリングをカスタマイズするには、Global Filterインターフェースを実現する必要があります.このインターフェースはGatewayFilterと同じ方法で定義されていますが、Global Filterの例は全てのルートに作用します.
グローバルフィルタをカスタマイズ
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
*
*/
@Slf4j
@Component
public class CustomizeGlobalFilter implements GlobalFilter {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String path = exchange.getRequest().getURI().getPath();
log.info("[CustomizeGlobalFilter] :{}", path);
long start = System.currentTimeMillis();
return chain.filter(exchange)
// then ,
.then(Mono.fromRunnable(() ->
log.info("[ {} ] :{} /ms", path, System.currentTimeMillis() - start)
));
}
}
上記のコードでは、@Componentコメントを使ってグローバルフィルタを有効にします.もう一つの方法は、これらのグローバルフィルタを専門的な配置クラスを使って実際化し、Spring容器に管理することです.コードは以下の通りです.import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
@Slf4j
@Configuration
public class FilterConfig {
@Bean
// ,
@Order(Ordered.HIGHEST_PRECEDENCE)
public GlobalFilter myGlobalFilter(){
log.info("create myGlobalFilter...");
return new MyGlobalFilter();
}
}