Spring Cloud gateway 三 自定义过滤器GatewayFilter
之前zuul 网关介绍。他有过滤器周期是四种,也是四种类型的过滤器。而gateway 只有俩种过滤器:“pre” 和 “post”。
- PRE: 这种过滤器在请求被路由之前调用。
-
POST:这种过滤器在路由到微服务以后执行。
-
这俩种过滤器是不是很熟悉。其实和zuul的过滤器很像。
但是gateway 过滤器又可以分为俩种。GatewayFilter 与 GlobalFilter。
- GlobalFilter 全局过滤器
- GatewayFilter 将应用到单个路由或者一个分组的路由上。
还有内置的过滤器断言机制。在上一篇已经做过介绍。本篇就不在介绍。
同样全局过滤器也在上一篇列举了全局过滤器的一种写法,有兴趣的同学可以回过头看一下。
自定义过滤器
创建ServerGatewayFilter 类
package com.xian.cloud.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
* <Description>
* @author xianliru@100tal.com
* @version 1.0
* @createDate 2019/11/07 17:34
@Slf4j
public class ServerGatewayFilter implements GatewayFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("ServerGatewayFilter filter ");
return chain.filter( exchange );
@Override
public int getOrder() {
return 0;
}
创建 GatewayRoutesConfiguration
package com.xian.cloud.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
* <Description>
* @author xianliru@100tal.com
* @version 1.0
* @createDate 2019/11/08 09:45
@Configuration
@Slf4j
public class GatewayRoutesConfiguration {
* java 配置 server 服务路由
* @param builder
* @return
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
log.info("ServerGatewayFilter filtet........");
return builder.routes()
.route(r ->
r.path("/server/**")
.filters(
f -> f.stripPrefix(1)
.filters(new ServerGatewayFilter())