gateway(二、過濾器)


 

過濾器其實是路由轉發+過濾器  

自定義過濾器

 

首先創建一個類繼承下邊兩個類,實現過濾器

然后在啟動項中通過創建bean的方式創建路由器 

@Component
public class TimeFilter implements GatewayFilter, Ordered {

private static final Logger logger = LoggerFactory.getLogger(TimeFilter.class);

private static final String ELAPSED_TIME_BEGIN = "timeBegin";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
exchange.getAttributes().put(ELAPSED_TIME_BEGIN, System.currentTimeMillis());
return chain.filter(exchange).then(
Mono.fromRunnable(() -> {
Long startTime = exchange.getAttribute(ELAPSED_TIME_BEGIN);
if (startTime != null) {
logger.info(exchange.getRequest().getURI().getRawPath() + ": " + (System.currentTimeMillis() - startTime) + "ms");
}
})
);
}

@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}
 @Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder builder) {
// @formatter:off
return builder.routes()
// .route(r -> r.path("/consulserver/**")
// .filters(f -> f.stripPrefix(1)
// .filter(new TimeFilter())
// .addResponseHeader("X-Response-Default-Foo", "Default-Bar"))
// .uri("lb://consulserver")
// .order(0)
// .id("fluent_customer_service")
// )
// .build();


全局過濾器只需要把繼承的類改變一下就行了
之后在啟動項中創建這個類的bean就行了
public class TokenFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

String token = exchange.getRequest().getQueryParams().getFirst("token");
if (token == null||token.isEmpty()){
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}

@Override
public int getOrder() {
return 0;
}
}
在啟動類中創建
//    @Bean
// public TokenFilter tokenFilter(){
// return new TokenFilter();
// }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM