自定义过滤工厂类
DemoGatewayFilterFactory
package com.learning.springcloud.custom;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
public class DemoGatewayFilterFactory extends AbstractGatewayFilterFactory {
public DemoGatewayFilterFactory() {
public List shortcutFieldOrder() {
return Arrays.asList("name", "value");
public GatewayFilter apply(DemoGatewayFilterFactory.Config config) {
return new GatewayFilter() {
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String value = exchange.getRequest().getQueryParams().getFirst("name");
if (StringUtils.isBlank(value)) {
return chain.filter(exchange);
if ("YES".equals(value)) {
return chain.filter(exchange);
exchange.getResponse().setStatusCode(HttpStatus.NOT_FOUND);
return exchange.getResponse().setComplete();
public static class Config {
public String getName() {
public void setName(String name) {
public String getValue() {
public void setValue(String name) {
过滤器配置说明
server-addr: 127.0.0.1:8847
- id: order_route # 路由唯一标识
访问效果

- 带name参数值不是YES的拦截,返回 not found


实现说明
- 命名必须需要以 FilterFactory 结尾(约定规范)
- 继承 AbstractGatewayFilterFactory 类
- 必须为spring的组件bean(@Component)
- 必须要有内部类 Config 以及 对应的 shortcutFieldOrder 方法
- 重写 apply 方法的逻辑 (apply(DemoGatewayFilterFactory.Config config))
- 可通过 exchange.getRequest() 获取到 ServerHttpRequest 对象
- 从而获取到请求的参数、请求方式、请求头等信息