美文网首页
35.Gateway局部过滤器

35.Gateway局部过滤器

作者: LANSHENGYANG | 来源:发表于2020-06-02 09:15 被阅读0次

局部过滤器

  • 局部过滤器是针对单个路由的过滤器。

内置局部过滤器

  • 在SpringCloud Gateway中内置了很多不同类型的网关路由过滤器。具体如下:
过滤器工厂 作用 参数
AddRequestHeader 为原始请求添加Header Header的名称及值
AddRequestParameter 为原始请求添加请求参数 参数名称及值
AddResponseHeader 为原始响应添加Header Header的名称及值
DedupeResponseHeader 剔除响应头中重复的值 需要去重的Header名称及去重策略
Hystrix 为路由引入Hystrix的断路器保护 HystrixCommand的名称
FallbackHeaders 为fallbackUri的请求头中添加具体的异常信息 Header的名称
PrefixPath 为原始请求路径添加前缀 前缀路径
PreserveHostHeader 为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host
RequestRateLimiter 用于对请求限流,限流算法为令牌桶 keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
RedirectTo 将原始请求重定向到指定的URL http状态码及重定向的url
RemoveHopByHopHeadersFilter 为原始请求删除IETF组织规定的一系列Header 默认就会启用,可以通过配置指定仅删除哪些Header
RemoveRequestHeader 为原始请求删除某个Header Header名称
RemoveResponseHeader 为原始响应删除某个Header Header名称
RewritePath 重写原始的请求路径 原始路径正则表达式以及重写后路径的正则表达式
RewriteResponseHeader 重写原始响应中的某个Header Header名称,值的正则表达式,重写后的值
SaveSession 在转发请求之前,强制执行WebSession::save操作
secureHeaders 为原始响应添加一系列起安全作用的响应头 无,支持修改这些安全响应头的值
SetPath 修改原始的请求路径 修改后的路径
SetResponseHeader 修改原始响应中某个Header的值 Header名称,修改后的值
SetStatus 修改原始响应的状态码 HTTP 状态码,可以是数字,也可以是字符串
StripPrefix 用于截断原始请求的路径 使用数字表示要截断的路径的数量
Retry 针对不同的响应进行重试 retries、statuses、methods、series
RequestSize 设置允许接收最大请求包的大小。如果请求包大小超过设置的值,则返回 413 Payload Too Large 请求包大小,单位为字节,默认值为5M
ModifyRequestBody 在转发请求之前修改原始请求体内容 修改后的请求体内容
ModifyResponseBody 修改原始响应体的内容 修改后的响应体内容
Default 为所有路由添加过滤器 过滤器工厂名称及值

内置过滤器的使用

server:
  port: 7000
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.110.130:8848
    gateway:
      discovery:
        locator:
          enabled: true # 让gateway从nacos中获取服务信息
      routes: # 路由数组[]
        - id: product_route # 当前路由的标识,要求唯一,默认是UUID
          uri: http://localhost:8081 # 请求最终要转发的地址
          order: 1 # 路由的优先级,数字越小代表路由的优先级越高
          predicates:  #断言(条件判断,返回值是Boolean,转发请求要求满足的条件)
            - Path=/product-serv/** # 当请求路径满足path指定的规则时,此路由信息才会正常转发
          filters: # 过滤器(在请求传递过程中 对请求做一些手脚)
            - StripPrefix=1 # 在请求转发之前去掉一层路径
            - SetStatus=250

自定义局部过滤器

  • 第1步:在配置文件中,添加一个Log的过滤器配置
server:
  port: 7000
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.110.130:8848
    gateway:
      discovery:
        locator:
          enabled: true # 让gateway从nacos中获取服务信息
      routes: # 路由数组[]
        - id: product_route # 当前路由的标识,要求唯一,默认是UUID
          uri: http://localhost:8081 # 请求最终要转发的地址
          order: 1 # 路由的优先级,数字越小代表路由的优先级越高
          predicates:  #断言(条件判断,返回值是Boolean,转发请求要求满足的条件)
            - Path=/product-serv/** # 当请求路径满足path指定的规则时,此路由信息才会正常转发
          filters: # 过滤器(在请求传递过程中 对请求做一些手脚)
            - StripPrefix=1 # 在请求转发之前去掉一层路径
            - Log=true,false # 控制日志是否开启
  • 第2步:自定义一个过滤器工厂,实现方法
/**
 * 自定义局部过滤器工厂类
 */
@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogGatewayFilterFactory.Config> {

    /**
     * 构造器
     */
    public LogGatewayFilterFactory(){
        super(LogGatewayFilterFactory.Config.class);
    }

    /**
     * 读取配置文件中的参数 赋值到 配置类中
     * @return
     */
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("consoleLog","cacheLog");
    }

    /**
     * 过滤器逻辑
     * @param config
     * @return
     */
    @Override
    public GatewayFilter apply(LogGatewayFilterFactory.Config config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                if(config.isCacheLog()){
                    System.out.println("cacheLog已经开启...");
                }
                if(config.isConsoleLog()){
                    System.out.println("consoleLog已经开启...");
                }
                return chain.filter(exchange);
            }
        };
    }

    /**
     * 配置类 接收配置参数
     */
    @Data
    @NoArgsConstructor
    public static class Config {
        private boolean consoleLog;
        private boolean cacheLog;
    }
}

相关文章

  • 35.Gateway局部过滤器

    局部过滤器 局部过滤器是针对单个路由的过滤器。 内置局部过滤器 在SpringCloud Gateway中内置了很...

  • 秒杀限流-网关-商品维度限流控制

    pom 依赖 局部过滤器 局部过滤器配置

  • 过滤器

    全局过滤器 局部过滤器 保留小数 局部: 全局: 过滤器获取时间

  • VUE过滤器和计算属性

    过滤器主要分为全局过滤器和局部过滤器。 全局过滤器如下: 局部过滤器如下: 计算属性如下: 过滤器中获取日期: 计...

  • vue的过滤器及计算属性

    1,过滤器:让要显示在页面上的内容进行重新筛选2,过滤器分为全局过滤器和局部过滤器全局过滤器: 局部过滤器: 3,...

  • 过滤器、计算属性

    全局过滤器 局部过滤器 计算属性

  • VUE过滤器

    过滤器:让要显示在页面上的内容重新筛选。 主要分为全局过滤器和局部过滤器。全局过滤器如下: 局部过滤器如下: 过滤...

  • Vue进阶(1)

    一.过滤器 过滤器分为局部过滤器和全局过滤器 1.局部过滤器 格式 2.全局过滤器 格式 练习 1.当数字为小于1...

  • 2018-08-14

    1.兄弟间的传值? 2.局部过滤器和局部自定义属性? 局部过滤器:filters 局部自定义属性:directiv...

  • 2018-09-17

    1,过滤器过滤器:让要显示在页面上的内容进行重新筛选过滤器分为:全局过滤器和局部过滤器,两种,且两种写法不同局部过...

网友评论

      本文标题:35.Gateway局部过滤器

      本文链接:https://www.haomeiwen.com/subject/yrmyzhtx.html