当前位置: 首页 > 科技观察

SpringCloudGateway应用谓词

时间:2023-03-12 00:10:13 科技观察

环境详解1:springboot2.3.7+springcloudHoxton.SR9SpringCloudGateway工作流程:客户端调用springcloudgateway配置请求。根据配置的映射确定请求和路由,发送给网关webhandler。此处理程序通过特定于请求的过滤器运行请求。过滤器用虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤逻辑。然后提出代理请求。发出代理请求后,运行“post”过滤器逻辑。一、路由谓词1、路由谓词工厂函数后:谓词工厂后接受一个参数datetime(javaZonedDateTime)。此谓词匹配指定日期时间之后发生的请求。以下示例配置AfterRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:after_routeuri:https://www.baidu.compredicates:-After=2021-01-10T17:42:47.789-07:00必须在2021-01-10T17:42:47.789-07:00之后访问所有请求。当超过当前配置的时间,请求会返回404。测试:当前时间:2021-01-1117:09After=2021-01-10T17:42:47.789-07:00页面正常调整:设置:After=2021-01-20T17:42:47.789-07:002。路由谓词工厂作用之前:谓词工厂之前接受一个参数datetime(它是javaZonedDateTime)。此谓词匹配指定日期时间之前发生的请求。以下示例配置BeforeRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:before_routeuri:https://www.qq.compredicates:-Before=2021-01-10T17:42:47.789-07:00运行结果和After刚好相反。3.Betweenroutepredicatefactory作用:Betweenpredicatefactory接受两个参数datetime(是javaZonedDateTime)。此谓词匹配请求必须发生在两个日期之间。以下示例配置BetweenRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:between_routeuri:https://www.163.compredicates:-Between=2021-01-01T17:42:47,2021-01-10T17:42:47请求必须在2021-01-01T17:42:47和2021-01-10T17:42:47之间。如果超过这个日期范围,会返回404。Failed:Configuration:Between=2021-01-01T17:42:47,2021-01-10T17:42:474.Cookie路由谓词工厂函数:只有网关请求包含指定的cookie才匹配,否则404。下面的例子配置CookieRoutepredicate:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:cookie_routeuri:https://www.baidu.compredicates:-Cookie=code,testiptv255当requestheader请求即可仅当包含的cookie包含名称作为代码且值为testiptv255时才匹配。示例:当不包含namecode的cookie时,请求返回404。5、Header路由谓词工厂的作用:当请求中包含指定的Header信息时,可以匹配请求。以下示例配置HeaderRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:header_routeuri:https://www.baidu.compredicates:-Header=Host,localhost:20000当网关的RequestHeader中包含Host请求头,且值为localhost:20000时,请求将被匹配。例子:6.Host路由谓词工厂的作用:当请求头中的Host头信息在配置中的列表中时,就会匹配网关。以下示例配置HostRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:host_routeuri:https://www.baidu.compredicates:-Host=**.xg。com,localhost:20000当请求Header中Host的值为:www.xg.com或xxx.xg.com或localhost:20000时,将匹配路由:示例:7.方法路由谓词工厂作用:当request是一个指定的Method,就会匹配路由。下面的例子配置了MethodRoutepredicate:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:method_routeuri:https://www.baidu.compredicates:-Method=GET,POST时请求是GET或POST请求时,会匹配网关路由。例:8.Path路由谓词工厂的作用:当请求的路径为指定的Path时,匹配该路由。下面的例子配置PathRoute谓词:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:path_routeuri:https://www.baidu.compredicates:-Path=/api-a/{segment},/api-1/{segment}当请求地址为:http://xxx/api-a/xxx或http://xxx/api-1/xxx时,匹配路由;注意:你的目标地址应该有两个请求地址/api-a/xxx和/api-1/xxx。例子:页面显示404是因为http://www.baidu.com/api-a/1没有这样的请求地址。百度返回的404不是我们服务器返回的404错误。9.Queryroutingpredicatefactory的作用:只有当请求中包含指定的查询参数或者包含指定的查询参数和值时才匹配路由。下面的例子配置QueryRoute谓词:1.方法一:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:query_routeuri:https://www.baidu.compredicates:-Query=name2,方法二:spring:cloud:gateway:enabled:truediscovery:locator:enabled:truelowerCaseServiceId:trueroutes:-id:query_routeuri:https://www.baidu.compredicates:-Query=name,admin方法一:请求时只包含name参数就够了。方法二:当请求中包含name参数name且值为admin时匹配路由。当值不是admin时返回404。