首页 > 其他分享 >SpringCloud——网关过滤工厂GatewayFilterFactory

SpringCloud——网关过滤工厂GatewayFilterFactory

时间:2023-11-28 15:48:59浏览次数:35  
标签:网关 GatewayFilter Color SpringCloud route Request header GatewayFilterFactory pub

目录

GatewayFilter 工厂

网关过滤器工厂GatewayFilterFactory 允许以某种方式修改传入的HTTP 请求或返回的HTTP 响应。其作用域是某些特定路由。SpringCloudGateway 包括很多种内置的网关过滤器工厂。下面会学习较常用的几种。

AddRequestHeader

AddRequestHeader GatewayFilter 工厂需要一个 name 和 value 参数。下面的例子配置了一个 AddRequestHeader GatewayFilter

添加请求头

spring:
  application:
    name: depart-consumer # 微服务名称
  cloud:
    gateway:
      routes:
        - id: add_request_header_route
          uri: http://localhost:8080
          predicates:
            - Path=/**
          filters:
            - AddRequestHeader=X-Request-Color, blue

新建一个服务,端口8080,获取请求头

package com.zjw.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Enumeration;

/**
 * @since 2023/11/28 13:41
 */
@RestController
@RequestMapping("/info")
public class ShowInfoController {

    @GetMapping("/header")
    public String getHeader(HttpServletRequest request){
        Enumeration<String> headers = request.getHeaders("X-Request-Color");
        StringBuilder sb = new StringBuilder();
        while (headers.hasMoreElements()) {
            sb.append(headers.nextElement()).append(" ");
        }
        return "X-Request-Color: " + sb.toString();
    }
}

通过api实现增加请求头。

@Configuration
public class GatewayConfig {

    /**
     * 增加请求头
     */
    @Bean
    public RouteLocator addRequestHeader(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("add_request_header_route",
                        r -> r.path("/**")
                                .filters(fs -> fs
                                        .addRequestHeader("X-Request-Color", "blue")
                                        .addRequestHeader("X-Request-Color", "red"))
                                .uri("http://localhost:8080"))
                .build();
    }
}

AddRequestHeadersIfNotPresent

AddRequestHeadersIfNotPresent GatewayFilter 工厂接受一个由冒号分隔的 name 和 value 键值对的集合。下面的例子配置了一个 AddRequestHeadersIfNotPresent GatewayFilter

spring:
  application:
    name: depart-consumer # 微服务名称
  cloud:
    gateway:
      routes:
        - id: add_request_header_route
          uri: http://localhost:8080
          predicates:
            - Path=/**
          filters:
            - AddRequestHeader=X-Request-Color, blue
            - AddRequestHeadersIfNotPresent=X-Request-Color-1:blue,X-Request-Color-2:green

这个列表为所有匹配的请求在下游请求的header信息中添加了两个header信息 X-Request-Color-1:blueX-Request-Color-2:green。这类似于 AddRequestHeader 的工作方式,但与 AddRequestHeader 不同的是,它只在header 信息不存在的情况下才会这样做。否则,客户端请求中的原始值将被发送。

java写法

@Configuration
public class GatewayConfig {

    /**
     * addRequestHeader增加请求头
     */
    @Bean
    public RouteLocator addRequestHeadersIfNotPresent(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("add_request_header_route",
                        r -> r.path("/**")
                                .filters(fs -> fs
                                        .addRequestHeadersIfNotPresent("X-Request-Color:blue"))
                                .uri("http://localhost:8080"))
                .build();
    }
}

AddRequestParameter

AddRequestParameter GatewayFilter Factory需要一个 name 和 value 参数。下面的例子配置了一个 AddRequestParameter GatewayFilter

spring:
  application:
    name: depart-consumer # 微服务名称
  cloud:
    gateway:
      routes:
        - id: add_request_parameter_route
          uri: http://localhost:8080
          predicates:
            - Path=/**
          filters:
            - AddRequestParameter=color, blue
            - AddRequestParameter=color, red

java实现

@Configuration
public class GatewayConfig {

    /**
     * addRequestHeader增加请求头
     */
    @Bean
    public RouteLocator addRequestParameter(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("add_request_parameter_route",
                        r -> r.path("/**")
                                .filters(fs -> fs
                                        .addRequestParameter("color","red"))
                                .uri("http://localhost:8080"))
                .build();
    }
}

AddResponseHeader

AddResponseHeader GatewayFilter 工厂需要一个 name 和 value 参数。下面的例子配置了一个 AddResponseHeader GatewayFilter。

spring:
  application:
    name: depart-consumer # 微服务名称
  cloud:
    gateway:
      routes:
        - id: add_response_header_route
          uri: http://localhost:8080
          predicates:
            - Path=/**
          filters:
            - AddResponseHeader=X-Response-Color, Blue

java实现

@Configuration
public class GatewayConfig {

    /**
     * addResponseHeader增加响应头
     */
    @Bean
    public RouteLocator addResponseHeader(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("add_response_header_route",
                        r -> r.path("/**")
                                .filters(fs -> fs
                                        .addResponseHeader("color","red"))
                                .uri("http://localhost:8080"))
                .build();
    }
}

标签:网关,GatewayFilter,Color,SpringCloud,route,Request,header,GatewayFilterFactory,pub
From: https://www.cnblogs.com/zjw-blog/p/17862084.html

相关文章

  • SpringCloud——自定义断言工厂
    目录场景:用户的请求头中需要有指定的用户名和密码才能访问。断言工厂参考系统AfterRoutePredicateFactory写法。packagecom.zjw.factory;importlombok.Getter;importlombok.Setter;importorg.springframework.cloud.gateway.handler.predicate.AbstractRoutePredi......
  • 通用串口modbus转PROFIBUS DP网关PM-160在汽车行业的应用案例
    通用串口modbus转PROFIBUSDP网关PM-160在汽车行业的应用案例摘要:PM-160是泗博公司生产的,可以实现串口与PROFIBUSDP协议数据通信的网关。此案例讲述的是通过PM-160网关,成功将梅特勒-托利多电子秤上的自定义协议数据传递给西门子PLC的应用案例说明。背景:某公司做轴承和汽......
  • springcloud学生选课系统
    开发技术:jdk1.8,mysql5.7,idea,nodejs,vscodespringcloudspringbootmybatisvueelementui功能介绍:学生:登录,统计分析,选课(查看课程及选择),我的成绩老师:登录,统计分析,课程管理:课程信息维护成绩管理:成绩信息发布管理员:登录统计分析:统计成绩学生管理:学生增删改查老师管理:老师增删改查班级管......
  • 通过modbus转profinet网关多通道轮询替代485通讯程序轮询
    通过modbus转profinet网关多通道轮询替代485通讯程序轮询际应用中,由于其通讯方式的不同,不同类型的设备之间的通讯存在一定的困难。为了克服这一问题,可以采取一些技术手段来进行优化,比如通过modbus转profinet网关的多通道轮询来替代485通讯程序轮询。通过使用modbus转profinet网关......
  • Profinet转ModbusTCP网关详解
    Profinet转ModbusTCP网关详解Profinet转ModbusTCP网关是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过将Profinet协议转换成ModbusTCP协议,实现了不同网络之间的互联互通。这种网关设备具有简单、可靠的特点,能够满足不同设备之间的数据传递需求。在实际应用中,Prof......
  • PLC通过lora网关采集温室大棚温湿度数据
    概述:运用lora网关远程控制大棚内风机,日光灯,温湿度传感器等设备。可以实现远程获取现场环境的空气温湿度、土壤水分温度、二氧化碳浓度、光照强度可以自动控制温室湿帘风机、喷淋滴灌、加温补光等设备,并向远程计算机端推送实时数据,实现现场环境信息化,智能化远程管理。减少人工成......
  • tls 握手时被公司路由器网关阻断
    经过一天的研究发现当tcp三次握手成功后,客户端向服务端发送clienthello包时被网络出口网关设备立即返回RST包。客户端日志立即打印如下:随即tls建立连接失败。[2023-11-2317:47:55][ERROR]127.0.0.1:59998SSLhandshakefailedwithigcc.cc:9120:Connectionresetbypeer......
  • 视频监控平台EasyCVR+智能分析网关+物联网,联合打造智能环卫监控系统
    一、背景介绍城市作为人们生活的载体,有着有无数楼宇和四通八达的街道,这些建筑的整洁与卫生的背后,是无数环卫工作人员的努力。环卫工人通过清理垃圾、打扫街道、清洗公共设施等工作,保持城市的整洁和卫生,防止垃圾和污染对城市环境和居民健康造成危害。二、现存问题当前城市环卫......
  • 微服务 网关的 cors 跨域配置
     cors:浏览器询问服务器(浏览器给服务器发送options请求),让不让跨域  ......
  • DEVICENET 从站转 MODBUS-TCP 网关操作案例
    兴达易控DEVICENET从站转MODBUS-TCP网关操作案例兴达易控DEVICENET从站转MODBUS-TCP网关(XD-ETHDE20)是一款DEVICENET从站功能的通讯网关。该产品主要功能是将DEVICENET总线和MODBUS-TCP网络连接起来。兴达易控DEVICENET从站转MODBUS-TCP网关连接到DEVICENET总......