首页 > 其他分享 >SpringCloud入门(十一)路由过滤器和路由断言工厂

SpringCloud入门(十一)路由过滤器和路由断言工厂

时间:2024-11-25 22:35:26浏览次数:10  
标签:请求 示例 SpringCloud 过滤器 userservice 路由 断言

  一、路由过滤器

 

  路由过滤器( GatewayFilter )是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:
如图:网关路由过滤器:

 

 

路由过滤器的作用是:
  1.对路由的请求或响应做加工处理,比如添加请求头
  2.配置在路由下的过滤器只对当前路由的请求生效

Spring提供了31种不同的路由过滤器工厂。例如:
官网:

名称 | 说明

-AddRequestHeader | 给当前请求添加一个请求头
-RemoveRequestHeader | 移除请求中的一个请求头
-AddResponseHeader | 给响应结果中添加一个响应头
-RemoveResponseHeader | 从响应结果中移除有一个响应头
-RequestRateLimiter | 限制请求的流量

 

 

示例:给所有进入userservice的请求添加一个请求头:Truth=IT is freaking awesome!

实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器:

只需要修改gateway服务的application.yml文件,添加路由过滤即可:

spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/** 
        filters: # 过滤器
        - AddRequestHeader=Truth, IT is freaking awesome! # 添加请求头

 

当前过滤器写在userservice路由下,因此仅仅对访问userservice的请求有效。

 

默认过滤器:defaultFilters的作用是:对所有路由都生效的过滤器
如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

spring:
  cloud:
    gateway:
      routes:
      - id: user-service 
        uri: lb://userservice 
        predicates: 
        - Path=/user/**
      default-filters: # 默认过滤项
      - AddRequestHeader=Truth, IT is freaking awesome! 

 


  二、路由断言工厂


路由断言工厂Route Predicate Factory,我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件

例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来 处理的,像这样的断言工厂在SpringCloudGateway还有:

名称 - 说明 - 示例

- After : 是某个时间点后的请求
示例: After=2037-01-20T17:42:47.789-07:00[America/Denver] :
- Before : 是某个时间点之前的请求
示例: Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] :
- Between : 是某两个时间点之前的请求
示例: Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver] :
- Cookie : 请求必须包含某些cookie
示例: Cookie=chocolate, ch.p :
- Header : 请求必须包含某些header
示例: Header=X-Request-Id, \d+ :
- Host : 请求必须是访问某个host(域名)
示例: Host=**.somehost.org,**.anotherhost.org :
- Method : 请求方式必须是指定方式
示例: Method=GET,POST :
- Path : 请求路径必须符合指定规则
示例: Path=/red/{segment},/blue/** :
- Query : 请求参数必须包含指定参数
示例: Query=name, Jack或者- Query=name :
- RemoteAddr : 请求者的ip必须是指定范围
示例: RemoteAddr=192.168.1.1/24 :
- Weight : 权重处理

  路由工厂作用(PredicateFactory):读取用户配置的断言规则,而后解析成判断条件,对用户请求做判断

标签:请求,示例,SpringCloud,过滤器,userservice,路由,断言
From: https://www.cnblogs.com/kongsq/p/18568940

相关文章

  • SpringCloud入门(十二)全局过滤器和跨域
    一、全局过滤器全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的,如果我们希望拦截请求,做自己的业务逻辑则没办法实现。而GlobalFilter的逻辑需要自己写代码实现。定义方式是实现Glob......
  • WEB攻防-XSS跨站&CSP策略&HttpOnly属性&Filter过滤器&标签闭合&事件触发
    1.CSP(ContentSecurityPolicy内容安全策略)内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。禁止加载外域代码,防止复杂的攻击......
  • SpringCloud入门(九)Feign实战应用和性能优化
    一、Feign实战应用 Feign的客户端与服务提供者的controller代码非常相似:有没有一种办法简化这种重复的代码编写呢?方式一:继承优点:简单。实现了代码共享。缺点:服务提供方、服务消费方紧耦合。参数列表中的注解映射并不会继承,因此Controller中必须再次声明方法、参数列表、......
  • SpringCloud入门(十)统一网关Gateway
    一、网关的作用SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。网关架构图: 网关......
  • SpringCloud入门(七)Feign声明式远程调用
    利用RestTemplate发起远程调用的代码,存在下面的问题:代码可读性差,编程体验不统一。参数复杂URL难以维护。Feign是一个声明式的http客户端,官方地址:https://spring.io/projects/spring-cloud-openfeign 。其作用是帮助我们优雅的实现http请求的发送。一、使用Feign实......
  • SpringCloud入门(八)Feign自定义配置
    一、Feign自定义配置Feign可以支持很多的自定义配置,如下表所示:-类型:feign.Logger.Level作用:修改日志级别说明:包含四种不同的级别:NONE、BASIC、HEADERS、FULL-类型:feign.codec.Decoder作用:响应结果的解析器说明:http远程调用的结果......
  • 从零开始,全面解锁如何使用 Docker-Compose 在群晖 NAS、飞牛 NAS、软路由、OpenWRT 与
    文章目录......
  • SpringCloud入门(六)Nacos注册中心(下)
    一、Nacos环境隔离Nacos提供了namespace来实现环境隔离功能。  nacos中可以有多个namespace。namespace下可以有group、service等。不同namespace之间相互隔离,例如不同namespace的服务互相不可见。使用NacosNamespace环境隔离步骤:1.在Nacos控制台可以创建n......
  • eNSP网络毕业设计—基于策略路由的购物中心网络设计与研究
    有实验或毕设相关问题的同学点击文章底部作者名片了解详细内容,本文仅供参考,如需源文件可私信作者获取。目录摘要1引言1.1研究背景1.2研究意义1.3国内外应用现状1.4研究目标2需求分析2.1网络现状分析2.2业务需求分析2.3应用需求分析2.3.1应用类型2.......
  • WPF笔记2——路由事件
    WPF的路由事件(RoutedEvents),允许事件在UI元素层次结构中传播。在WPF中,UI元素被组织成一棵树,成为可视化树(VisualTree)。当一个事件(如鼠标点击)在某个控件上触发时,这个事件可以沿着VisualTree向上(向树的根部)或向下(向树的枝叶)传播;如果不广播就是直接事件。路由事件有两个主要的传......