ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringCloudAlibaba - Gateway 自定义过滤器工厂

2021-09-30 13:01:05  阅读:224  来源: 互联网

标签:自定义 exchange 工厂 过滤器 import SpringCloudAlibaba Gateway


目录

前言

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 -
白嫖有风险
点赞加收藏

标签:自定义,exchange,工厂,过滤器,import,SpringCloudAlibaba,Gateway
来源: https://blog.csdn.net/weixin_41182727/article/details/120564252

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有