Spring Cloud Gateway(十):网关过滤器工厂 GatewayFilterFactory

本文基于 spring cloud gateway 2.0.1

1、GatewayFilterFactory 简介

路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。 路径过滤器的范围限定为特定路径。 Spring Cloud Gateway包含许多内置的GatewayFilter工厂。

网关过滤器工厂接口有多个实现类,在每个 GatewayFilterFactory 实现类的 apply( T config) 方法里,都声明了一个实现 GatewayFilter 的内部类。

内置的过滤器工厂一共有22个,分别位于 org.springframework.cloud.gateway.filter.factory及org.springframework.cloud.gateway.filter.factory.rewrite包中

GatewayFilterFactory

2、GatewayFilterFactory 分类

过滤器 有 20 多个 实现 类, 包括 头部 过滤器、 路径 类 过滤器、 Hystrix 过滤器 和 变更 请求 URL 的 过滤器, 还有 参数 和 状态 码 等 其他 类型 的 过滤器。

内置的过滤器工厂有22个实现类,包括 头部过滤器、路径过滤器、Hystrix 过滤器 、请求URL 变更过滤器,还有参数和状态码等其他类型的过滤器。根据过滤器工厂的用途来划分,可以分为以下几种:Header、Parameter、Path、Body、Status、Session、Redirect、Retry、RateLimiter和Hystrix

在这里插入图片描述

3、GatewayFilterFactory 源码

由接口名称上的注解 @FunctionalInterface 可知,GatewayFilterFactory是一个函数式接口,其中 default 类型的方法 name 用来对过滤器进行标准化命名,apply 方法用于定义具体的过滤操作,泛型 C 是在各个实现类中的配置对象

@FunctionalInterface
public interface GatewayFilterFactory<C> extends ShortcutConfigurable, Configurable<C> {

	String NAME_KEY = "name";
	String VALUE_KEY = "value";

	// useful for javadsl
	default GatewayFilter apply(Consumer<C> consumer) {
		C config = newConfig();
		consumer.accept(config);
		return apply(config);
	}

	default Class<C> getConfigClass() {
		throw new UnsupportedOperationException("getConfigClass() not implemented");
	}

	@Override
	default C newConfig() {
		throw new UnsupportedOperationException("newConfig() not implemented");
	}

	GatewayFilter apply(C config);

	default String name() {
		//TODO: deal with proxys
		return NameUtils.normalizeFilterFactoryName(getClass());
	}

	@Deprecated
	default ServerHttpRequest.Builder mutate(ServerHttpRequest request) {
		return request.mutate();
	}
}

3.1、GatewayFilterFactory 抽象实现类

在这里插入图片描述

由 GatewayFilterFactory 类图可知,GatewayFilterFactory主要有三个抽象类:

AbstractGatewayFilterFactory:

    HystrixGatewayFilterFactory
    ModifyRequestBodyGatewayFilterFactory
    ModifyResponseBodyGatewayFilterFactory
    PrefixPathGatewayFilterFactory
    PreserveHostHeaderGatewayFilterFactory
    RedirectToGatewayFilterFactory
    RemoveRequestHeaderGatewayFilterFactory
    RemoveResponseHeaderGatewayFilterFactory
    RequestRateLimiterGatewayFilterFactory
    RetryGatewayFilterFactory
    RewritePathGatewayFilterFactory
    SaveSessionGatewayFilterFactory
    SecureHeadersGatewayFilterFactory
    SetPathGatewayFilterFactory
    SetStatusGatewayFilterFactory
    StripPrefixGatewayFilterFactory

AbstractNameValueGatewayFilterFactory(继承自AbstractGatewayFilterFactory)

    AddRequestHeaderGatewayFilterFactory
    AddRequestParameterGatewayFilterFactory
    AddResponseHeaderGatewayFilterFactory
    SetRequestHeaderGatewayFilterFactory
    SetResponseHeaderGatewayFilterFactory

AbstractChangeRequestUriGatewayFilterFactory(继承自AbstractGatewayFilterFact
  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值