• SpringCloudAlibaba


    前言

    Gateway中的过滤器可以为路由添加业务逻辑,修改请求以及响应


    环境

    Spring Cloud Hoxton.SR9 + Spring Cloud Alibaba 2.2.6.RELEASE


    Gateway过滤器的生命周期

    • pre: Gateway转发请求之前
    • post: Gateway转发请求之后

    过滤器工厂

    内置过滤器工厂

    • AddRequestHeader GatewayFilter Factory示例,为原始请求添加请求参数foo=bar
    gateway:
      discovery:
        locator:
          # 让gateway通过服务发现组件找到其他的微服务
          enabled: true
      routes:
        - id: user-center
          uri: lb://user-center
          predicates:
            - Path=/**
          filters:
            - AddRequestParameter=foo, bar
    
    • 输入日志

    在这里插入图片描述


    自定义过滤器工厂

    自定义过滤器工厂 - 实现方式

    • 实现自定义过滤器工厂有两种方式
    继承 AbstractGatewayFilterFactory
    继承 AbstractNameValueGatewayFilterFactory
    

    自定义过滤器工厂 - 具体实例

    • 实现自定义过滤器工厂 - 日志打印
    • application.yml
    gateway:
      discovery:
        locator:
          # 让gateway通过服务发现组件找到其他的微服务
          enabled: true
      routes:
        - id: user-center
          uri: lb://user-center
          predicates:
            - Path=/**
          filters:
            - PreLog=参数1,参数2
    
    • PreLogGatewayFilterFactory.java
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.cloud.gateway.filter.GatewayFilter;
    import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    
    /**
     * 自定义过滤器工厂 - 日志打印
     * 必须以GatewayFilterFactory结尾
     */
    @Slf4j
    @Component
    public class PreLogGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
        @Override
        public GatewayFilter apply(NameValueConfig config) {
            return ((exchange, chain) -> {
                log.info("自定义过滤器工厂 - 日志打印参数:{},{}", config.getName(), config.getValue());
    
                // 修改请求
                ServerHttpRequest modifiedRequest = exchange.getRequest()
                        .mutate()
                        .build();
    
                // 修改exchange
                ServerWebExchange modifiedExchange = exchange.mutate()
                        .request(modifiedRequest)
                        .build();
    
                // 传递给下一个过滤器处理
                return chain.filter(modifiedExchange);
            });
        }
    }
    
    • 访问GATEWAY_URL/**

    在这里插入图片描述


    自定义过滤器工厂- 核心API

    exchange.getRequest().mutate().xxx // 修改request
    exchange.mutate().xxx // 修改exchange
    chain.filter(exchange) // 传递给下一个过滤器处理
    exchange.getResponse() // 拿到响应
    

    - End -
    白嫖有风险
    点赞加收藏
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    Nginx 配置请求响应时间
    数论筛法小结
    梅田湖种田划水摸鱼记
    好题
    奇技淫巧 (不定期更新)
    随机化算法小结(Miller Rabin,Pollard Rho, 模拟退火, 随机化贪心)
    题解 P6918 [ICPC2016 WF]Branch Assignment
    P2605 [ZJOI2010]基站选址解题思路
    题解 BZOJ 3156 防御准备
    Flutter大坑 Your Xcode project requires migration 报错大坑
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15356214.html
Copyright © 2020-2023  润新知