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

这篇具有很好参考价值的文章主要介绍了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]
    
  • 使用场景:当上线一新服务时在未来某个时间提供服务

两种配置方式的区别:
第一种便捷方式配置的值是按逗号分隔,再按shortcutFieldOrder方法返回的字段顺序最后绑定的配置对象上。
第二种配置方式即标准配置方式,会把整个map作为配置对象绑定源
区别就是第一种最多只会绑定指定的字段尽管可能配置类字段有其它字段!文章来源地址https://www.toymoban.com/news/detail-463454.html

  1. BeforeRoutePredicateFactory
  • 作用:与AfterRoutePredicateFactory正好相反,判断当请求时间是否在指定配置时间之前
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Before=2019-04-20T17:42:47.789+08:00[Asia/Shanghai]
    
  • 使用场景:指定服务在指定时间以内访问
  1. 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]
    
  • 使用场景:指定服务在指定时间范围内访问
  1. CloudFoundryRouteServiceRoutePredicateFactory
  • 作用:判断请求是否针对 Cloud Foundry 路由服务(通过判断请求头中是否有X-CF-Forwarded-Url、X-CF-Proxy-Signature、X-CF-Proxy-Metadata这个三个配置)
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=CloudFoundryRouteService
    
  1. CookieRoutePredicateFactory
  • 作用:判断请求中cookie是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)
  • 使用方式
    # cookie中id的值必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Cookie=id, \\d+
    
  1. HeaderRoutePredicateFactory
  • 作用:判断请求头中是否包含指定字段的以及对应的值是否符合指定的模式(正则表达式)
  • 使用方式
    # header中X-Request-Id的值必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Header=X-Request-Id, \\d+
    
  1. HostRoutePredicateFactory
  • 作用:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Host=api1.hiboot.cn,api2.hiboot.cn
    
  1. MethodRoutePredicateFactory
  • 作用:判断请求方法类型是否跟指定的类型匹配
  • 使用方式
    #指定路由只接受post和get请求
    spring.cloud.gateway.routes[0].predicates[0]=Method=POST,GET
    
  1. PathRoutePredicateFactory
  • 作用:判断请求的URI部分是否满足路径规则。使用PathContainer解析
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Path=/web/**
    
  1. QueryRoutePredicateFactory
  • 作用: 判断请求参数(QueryParams)是否具有给定名称且值与正则表达式匹配
  • 使用方式
    #指定请求参数age必须是数字
    spring.cloud.gateway.routes[0].predicates[0]=Query=age,\\d+
    
  1. 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}
    
  1. RemoteAddrRoutePredicateFactory
  • 作用:判断请求访问者的地址是否在指定指定ip/mask内
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=RemoteAddr=192.168.1.0/24
    
    • 使用场景:配置服务只允许指定ip可访问
  1. WeightRoutePredicateFactory
  • 作用:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发
  • 使用方式
    spring.cloud.gateway.routes[0].predicates[0]=Weight=group1,1
    
  1. 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

  1. RemoveCachedBodyFilter
  2. AdaptCachedBodyGlobalFilter
  3. NettyWriteResponseFilter
  4. GatewayMetricsFilter
  5. RouteToRequestUrlFilter
  6. ReactiveLoadBalancerClientFilter
  7. LoadBalancerServiceInstanceCookieFilter
  8. WebsocketRoutingFilter
  9. NettyRoutingFilter
  10. ForwardRoutingFilter

2.GatewayFilter

  1. AddRequestHeaderGatewayFilterFactory
  2. MapRequestHeaderGatewayFilterFactory
  3. AddRequestParameterGatewayFilterFactory
  4. AddResponseHeaderGatewayFilterFactory
  5. ModifyRequestBodyGatewayFilterFactory
  6. DedupeResponseHeaderGatewayFilterFactory
  7. ModifyResponseBodyGatewayFilterFactory
  8. CacheRequestBodyGatewayFilterFactory
  9. PrefixPathGatewayFilterFactory
  10. PreserveHostHeaderGatewayFilterFactory
  11. RedirectToGatewayFilterFactory
  12. RemoveRequestHeaderGatewayFilterFactory
  13. RemoveRequestParameterGatewayFilterFactory
  14. RemoveResponseHeaderGatewayFilterFactory
  15. RequestRateLimiterGatewayFilterFactory
  16. RewritePathGatewayFilterFactory
  17. RetryGatewayFilterFactory
  18. SetPathGatewayFilterFactory
  19. SecureHeadersGatewayFilterFactory
  20. SetRequestHeaderGatewayFilterFactory
  21. SetRequestHostHeaderGatewayFilterFactory
  22. SetResponseHeaderGatewayFilterFactory
  23. RewriteResponseHeaderGatewayFilterFactory
  24. RewriteLocationResponseHeaderGatewayFilterFactory
  25. SetStatusGatewayFilterFactory
  26. SaveSessionGatewayFilterFactory
  27. StripPrefixGatewayFilterFactory
  28. RequestHeaderToRequestUriGatewayFilterFactory
  29. RequestSizeGatewayFilterFactory
  30. RequestHeaderSizeGatewayFilterFactory

三、配置参数解析模式

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;
        
        ...
	}

到了这里,关于Spring Cloud Gateway内置的断言和过滤器作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud GateWay 全局过滤器

    这是一个自定义的 Spring Cloud Gateway 全局过滤器(Global Filter)。在 Spring Cloud Gateway 中,全局过滤器可以在请求被路由到目标服务之前或之后执行一些操作。这个过滤器实现了 GlobalFilter 接口和 Ordered 接口,这两个接口的作用如下: GlobalFilter 接口: 这是一个 Spring Cloud Gateway 提

    2024年02月11日
    浏览(29)
  • Spring Cloud Gateway 过滤器详解

    Spring Cloud Gateway根据作用范围划分为:GatewayFilter和GlobalFilter 由filter工作流程点,可以知道filter有着非常重要的作用,在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输

    2023年04月08日
    浏览(27)
  • Spring Cloud Gateway过滤器GlobalFilter详解

    一、过滤器的场景 在springCloud架构中,网关是必不可少的组件,它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节,客户端只需要和网关进行交互。所以网关顾名思义,就是网络的一个关卡。它就是一座城的城门守卫。所以这个守卫就可以做很多工作,比如对来访

    2024年02月14日
    浏览(29)
  • Spring Cloud Gateway快速入门(三)——过滤器

    Gateway过滤器是Spring Cloud Gateway提供的一种机制,用于对进入网关的请求和返回进行处理和转换。它可以用于实现各种功能,如请求鉴权、请求转发、请求限流、请求重试等。 网关过滤器是Spring Cloud Gateway提供的一种机制,用于在请求进入网关和响应离开网关时进行一些预处理

    2024年02月04日
    浏览(35)
  • Spring Cloud Gateway GlobalFilter(全局过滤器)详解(官方原版)

    GlobalFilter接口具有与GatewayFilter相同的签名。这些是有条件地应用于所有路由的特殊过滤器。 当请求与路由匹配时,过滤web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有路由特定实例添加到过滤器链中。这个组合过滤器链由org.springframework.core.Ordered接口排序,您可以通

    2024年02月09日
    浏览(33)
  • Spring-Cloud-Gateway如何自定义路由过滤器?

    遇到这么一个面试题:自定义网关过滤器实现把url中的请求参数放到http的header中传递给微服务。 我们知道网关的一个重要的作用就是路由转发,路由表的配置大概是这个样子: 其中的filters就是配置的路由过滤器,Spring已经内置了31个路由的过滤器,这些过滤器都是 org.spring

    2024年02月16日
    浏览(28)
  • 从Spring Cloud Gateway过滤器中获取请求体的最优方案

    在spring cloud gateway出现这个问题的时候我们第一反应应该很简单,但是真正实现的时候却有点困难。我看了很多相关的文档,感觉太多都不清晰而且解决不了问题。下面我就把我的方便理解的解决方案写下来。 1. 先重写请求体(过滤器优先级一定要在要获取body之前执行) 这

    2024年02月16日
    浏览(34)
  • Spring Security内置过滤器详解

    相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现GitHub快捷登录 Spring Security的过滤器链机制 Spring Security OAuth Client配置加载源码分析 根据前面的示例,我们已经知道启动时会加载18个过滤器,并且已经知道了请求会匹配到DefaultSecurityF

    2024年02月05日
    浏览(30)
  • 第九章 : Spring cloud 网关中心 Gateway (内置断言与自定义断言)

    第九章 : Spring cloud 网关中心 Gateway (内置断言与自定义断言) 前言 本章知识点:Spring cloud Gateway 内置断言(Predicate)类型的 yaml 和 json 数据格式;自定义路由Predicate 断言的案例。 Gateway 内置 Predicate 格式配置 概述 本文针对 Spring Cloud Gateway 框架中断言(Predicate)类型在 Yaml

    2024年01月17日
    浏览(27)
  • Spring Security 中的过滤器链是什么?它的作用是什么

    Spring Security是一个安全框架,它提供了强大的安全保护功能,可以帮助开发者更加方便地实现应用程序的安全性。Spring Security中的过滤器链是其中一个非常重要的部分,它起到了非常重要的作用。本文将介绍什么是Spring Security中的过滤器链,以及它的作用和如何使用它。同时

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包