• 两天学会微服务网关Gateway-Gateway过滤器


    锋哥原创的微服务网关Gateway视频教程:

    Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3_Gateway HelloWorld快速入门等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1oX4y1u7ZJ/Gateway分为Pre类型的过滤器和Post类型的过滤器。

    • Pre类型的过滤器在请求转发到后端微服务之前执行,在Pre类型过滤器链中可以做鉴权、限流等操作。

    • Post类型的过滤器在请求执行完成之后、将结果返回给客户端之前执行。

    在Spring Cloud Gateway中内置了很多Filter,Filter有两种实现,分别是GatewayFilter和GlobalFilter。GlobalFilter全局过滤器会应用到所有的路由上,而GatewayFilter只会应用到单个路由或者一个分组的路由上。

    5.1 Gateway过滤器工厂介绍

    过滤器 有 20 多个 实现 类, 包括 头部 过滤器、 路径 类 过滤器、 Hystrix 过滤器 和 变更 请求 URL 的 过滤器, 还有 参数 和 状态 码 等 其他 类型 的 过滤器。

    内置的过滤器工厂有22个实现类,包括 头部过滤器、路径过滤器、Hystrix 过滤器 、请求URL 变更过滤器,还有参数和状态码等其他类型的过滤器。根据过滤器工厂的用途来划分,可以分为以下几种:Header、Parameter、Path、Body、Status、Session、Redirect、Retry、RateLimiter和Hystrix

    5.2 AddRequestParameter GatewayFilter Factory

    1. spring:
    2. application:
    3. name: gateway-server
    4. cloud:
    5. gateway:
    6. routes:
    7. - id: add_request_parameter_route
    8. uri: http://localhost:8080/
    9. predicates:
    10. - Path=/product/**
    11. filters:
    12. - AddRequestParameter=info, hehe

    添加请求参数(属于前置过滤网关)

    5.3 RewritePath GatewayFilter Factory

    1. spring:
    2. application:
    3. name: gateway-server
    4. cloud:
    5. gateway:
    6. routes:
    7. - id: add_request_parameter_route
    8. uri: http://localhost:8080/
    9. predicates:
    10. - Path=/product/**, /api-gateway/**
    11. filters:
    12. - AddRequestParameter=info, hehe
    13. - RewritePath=/api-gateway(?<segment>/?.*), $\{segment}

    将/api-gateway/product/请求重写成/product/请求(属于前置过滤网关)

    5.4 SetStatus GatewayFilter Factory

    1. spring:
    2. application:
    3. name: gateway-server
    4. cloud:
    5. gateway:
    6. routes:
    7. - id: add_request_parameter_route
    8. uri: http://localhost:8080/
    9. predicates:
    10. - Path=/product/**, /api-gateway/**
    11. filters:
    12. - AddRequestParameter=info, hehe
    13. - RewritePath=/api-gateway(?<segment>/?.*), $\{segment}
    14. - SetStatus=456

    无论哪种情况,响应的HTTP状态都设置为456(属于后置过滤网关)

    5.5 AddResponseHeader GatewayFilter Factory

    1. spring:
    2. application:
    3. name: gateway-server
    4. cloud:
    5. gateway:
    6. routes:
    7. - id: add_request_parameter_route
    8. uri: http://localhost:8080/
    9. predicates:
    10. - Path=/product/**, /api-gateway/**
    11. filters:
    12. - AddRequestParameter=info, hehe
    13. - RewritePath=/api-gateway(?<segment>/?.*), $\{segment}
    14. - SetStatus=456
    15. - AddResponseHeader=X-Response-Author, java1234

    返回信息,添加header头信息(属于后置过滤网关)

    5.6 gateway全局过滤器 GlobalFilter

    全局过滤器不需要在配置文件中配置,作用在所有的路由上。我们可以用它来实现很多统一化处理的业务需求,比如负载均衡,统一过滤,路径转发,监控,日志等等。

    全局过滤器加上网关过滤器组成过滤器链,该过滤器链的执行顺序是根据@Order注解指定的数字大小,从小到大进行排序,数字越小,优先级越高。

    5.7 自定义过滤器

    Spring Cloud Gateway提供了过滤器的扩展功能,开发者可以根据实际业务需求来自定义GatewayFilter网关过滤器或者GlobalFilter全局过滤器。

    5.7.1 自定义GatewayFilter

    实现GatewayFilter,Ordered接口,以及配置类

    1. package com.java1234.filter;
    2. import org.springframework.cloud.gateway.filter.GatewayFilter;
    3. import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    4. import org.springframework.core.Ordered;
    5. import org.springframework.web.server.ServerWebExchange;
    6. import reactor.core.publisher.Mono;
    7. /**
    8. * 自定义网关过滤器
    9. * @author java1234_小锋
    10. * @site www.java1234.com
    11. * @company Java知识分享网
    12. * @create 2021-04-08 16:25
    13. */
    14. public class MyCustomerGatewayFilter implements GatewayFilter,Ordered {
    15. @Override
    16. public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    17. System.out.println("自定义网关过滤器");
    18. return chain.filter(exchange);
    19. }
    20. @Override
    21. public int getOrder() {
    22. return -1;
    23. }
    24. }

    5.7.2 自定义GlobalFilter

    实现GlobalFilter ,Ordered 接口,加上@Component注解即可;

    1. package com.java1234.filter;
    2. import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    3. import org.springframework.cloud.gateway.filter.GlobalFilter;
    4. import org.springframework.core.Ordered;
    5. import org.springframework.stereotype.Component;
    6. import org.springframework.web.server.ServerWebExchange;
    7. import reactor.core.publisher.Mono;
    8. /**
    9. * @author java1234_小锋
    10. * @site www.java1234.com
    11. * @company Java知识分享网
    12. * @create 2021-04-09 12:29
    13. */
    14. @Component
    15. public class MyCustomerGlobalFilter implements GlobalFilter ,Ordered {
    16. @Override
    17. public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    18. System.out.println("自定义全局过滤器");
    19. return chain.filter(exchange);
    20. }
    21. @Override
    22. public int getOrder() {
    23. return -2;
    24. }
    25. }

  • 相关阅读:
    python学习12--爬虫
    3D灌篮高手
    存储型XSS和BEEF浏览器攻击框架
    odoo13笔记点
    用C#通过sql语句操作Sqlserver数据库教程
    Python 基础语法
    Windows错误处理
    升降 ubuntu 内核的好工具 mainline
    Charles的证书下载(虚拟机)
    如何使用SHC对Shell脚本进行封装和源码隐藏
  • 原文地址:https://blog.csdn.net/caoli201314/article/details/136468801