跳到主要内容

【7】自定义过滤器

文章目录

    • 自定义网关过滤器
    • 方式1 继承AbstractGatewayFilterFactory
        1. 继承抽象类
        1. 添加配置
        1. 测试
    • 方式2 实现GatewayFilter 接口
  • 自定义全局过滤器
    • 案例演示之鉴权
        1. 编写过滤器
        1. 测试
    • 案例演示之防范XSS 攻击

自定义网关过滤器

需求:编写一个网关过滤器,实现打印请求URI。

方式1 继承AbstractGatewayFilterFactory

1. 继承抽象类

仿照默认的网关过滤器,实现一个简单打印请求路径和过滤器配置参数的功能。

@Slf4j
@Component
public class RequestLogGatewayFilterFactory extends AbstractGatewayFilterFactory<AbstractGatewayFilterFactory.NameConfig> {



public RequestLogGatewayFilterFactory() {


super(NameConfig.class);
}

@Override
public List<String> shortcutFieldOrder() {


return Arrays.asList("name");
}

@Override
public GatewayFilter apply(NameConfig config) {


return new GatewayFilter() {


@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {


// 获取请求路径
URI uri = exchange.getRequest().getURI();
log.info("获取到请求路径:{}", uri.toString());
//
log.info("配置属性:{}", config.getName());
return chain.filter(exchange);
}

@Override
public String toString() {


return GatewayToStringStyler.filterToStringCreator(RequestLogGatewayFilterFactory.this).toString();
}
};
}
}