java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringCloud Gateway内置的断言和过滤器

Spring Cloud Gateway内置的断言和过滤器作用说明

作者:kse_music

这篇文章主要介绍了Spring Cloud Gateway内置的断言和过滤器作用说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

对应版本3.1.7对应SpringCloud版本2021.0.7

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
      <version>3.1.7</version>
  </dependency>

一、内置断言

1.AfterRoutePredicateFactory

作用:判断当请求时间是否在指定配置时间之后

使用方式

spring.cloud.gateway.routes[0].predicates[0]=After=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
#也可以用下面的方式配置
#spring.cloud.gateway.routes[0].predicates[0].name=After
#spring.cloud.gateway.routes[0].predicates[0].args.datetime=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]

使用场景:当上线一新服务时在未来某个时间提供服务

两种配置方式的区别:

2.BeforeRoutePredicateFactory

作用:与AfterRoutePredicateFactory正好相反,判断当请求时间是否在指定配置时间之前

使用方式

spring.cloud.gateway.routes[0].predicates[0]=Before=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]

使用场景:指定服务在指定时间以内访问

3.BetweenRoutePredicateFactory

作用:判断当请求时间是否在指定配置时间之间

使用方式

spring.cloud.gateway.routes[0].predicates[0].name=Between
#在datetime1后面即请求时间大于该时间
spring.cloud.gateway.routes[0].predicates[0].args.datetime1=2029-04-20T17:42:47.789+08:00[Asia/Shanghai]
#在datetime2前面即请求时间小于该时间
spring.cloud.gateway.routes[0].predicates[0].args.datetime2=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]

使用场景:指定服务在指定时间范围内访问

4.CloudFoundryRouteServiceRoutePredicateFactory

作用:判断请求是否针对 Cloud Foundry 路由服务(通过判断请求头中是否有X-CF-Forwarded-Url、X-CF-Proxy-Signature、X-CF-Proxy-Metadata这个三个配置)

使用方式

spring.cloud.gateway.routes[0].predicates[0]=CloudFoundryRouteService

5.CookieRoutePredicateFactory

作用:判断请求中cookie是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)

使用方式

# cookie中id的值必须是数字
spring.cloud.gateway.routes[0].predicates[0]=Cookie=id, \\d+

6.HeaderRoutePredicateFactory

作用:判断请求头中是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)

使用方式

# header中X-Request-Id的值必须是数字
spring.cloud.gateway.routes[0].predicates[0]=Header=X-Request-Id, \\d+

7.HostRoutePredicateFactory

作用:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则

使用方式

spring.cloud.gateway.routes[0].predicates[0]=Host=api1.hiboot.cn,api2.hiboot.cn

8.MethodRoutePredicateFactory

作用:判断请求方法类型是否跟指定的类型匹配

使用方式

#指定路由只接受post和get请求
spring.cloud.gateway.routes[0].predicates[0]=Method=POST,GET

9.PathRoutePredicateFactory

作用:判断请求的URI部分是否满足路径规则。使用PathContainer解析

使用方式

spring.cloud.gateway.routes[0].predicates[0]=Path=/web/**

10.QueryRoutePredicateFactory

作用: 判断请求参数(QueryParams)是否具有给定名称且值与正则表达式匹配

使用方式

#指定请求参数age必须是数字
spring.cloud.gateway.routes[0].predicates[0]=Query=age,\\d+

11.ReadBodyRoutePredicateFactory

作用:读取请求体并缓存,后续调用谓词不需要再次反序列化

使用方式

spring.cloud.gateway.routes[0].predicates[0].name=ReadBody
spring.cloud.gateway.routes[0].predicates[0].args.inClass=java.lang.String
spring.cloud.gateway.routes[0].predicates[0].args.predicate=#{@testRequestBody}

12.RemoteAddrRoutePredicateFactory

作用:判断请求访问者的地址是否在指定指定ip/mask内

使用方式

spring.cloud.gateway.routes[0].predicates[0]=RemoteAddr=192.168.1.0/24

使用场景:配置服务只允许指定ip可访问

13.WeightRoutePredicateFactory

作用:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发

使用方式

spring.cloud.gateway.routes[0].predicates[0]=Weight=group1,1

14.XForwardedRemoteAddrRoutePredicateFactory

作用:判断是否允许根据“ X-Forward-For” HTTP标头过滤请求

使用方式

spring.cloud.gateway.routes[0].predicates[0]=XForwardedRemote=192.168.1.0/24,192.168.4.0/24

使用场景:与反向代理一起使用,例如负载平衡器或Web应用程序防火墙仅当请求来自可信赖的IP地址列表时,才允许该请求反向代理。

二、内置过滤器

1.GlobalFilter

2.GatewayFilter

三、配置参数解析模式

1.DEFAULT

配置的默认处理方式 :如果是便捷配置方式会根据接口中shortcutFieldOrder方法返回的字段顺序注入

例如:spring.cloud.gateway.routes[1].predicates[2]=Header=X-Request-Id, \\d+,则会将Header=X-Request-Id设置name,\\d+设置给regex

	default List<String> shortcutFieldOrder() {
		return Arrays.asList("header", "regexp");
	}

	public static class Config {

		@NotEmpty
		private String header;

		private String regexp;
		...

	}

2.GATHER_LIST

该解析方式的条件必须是一个字段,将配置参数解析成集合

例如:spring.cloud.gateway.routes[1].predicates[2]=Method=post,get

	default List<String> shortcutFieldOrder() {
		return Arrays.asList("methods");
	}

	public static class Config {

		private HttpMethod[] methods;

		public HttpMethod[] getMethods() {
			return methods;
		}

		public void setMethods(HttpMethod... methods) {
			this.methods = methods;
		}

	}

3.GATHER_LIST_TAIL_FLAG

该解析方式的条件必须是两个字段,前一个将配置参数解析成集合,后面一个必须要是Boolean类型数据

例如:spring.cloud.gateway.routes[1].predicates[2]=Path=/web/**, false

	default List<String> shortcutFieldOrder() {
		return Arrays.asList("patterns", "matchTrailingSlash");
	}

    public static class Config {

		private List<String> patterns = new ArrayList<>();

		private boolean matchTrailingSlash = true;
        
        ...
	}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文