Spring Cloud Gateway 之 AddRequestHeader GatewayFilter Factory

今天我们来学习下GatewayFilter Factory,中文解释就是过滤器工厂。

官方文档对GatewayFilter Factory的介绍:

Route filters allow the modification of the incoming HTTP request or outgoing HTTP response in some manner. Route filters are scoped to a particular route. Spring Cloud Gateway includes many built-in GatewayFilter Factories.

文档地址:http://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html#_gatewayfilter_factories

英文不好,就随意翻译下,大概的意思如下:

Spring Cloud Gateway的路由过滤器允许以某种方式修改传入的HTTP请求或输出的HTTP响应。只作用于特定的路由。Spring Cloud Gateway中内置了很多的过滤器工厂。

通过目前的文档,我看到了内置的数量为20个,今天我们来学习第一个过滤器工厂AddRequestHeader GatewayFilter Factory。

通过名称我们可以快速的明白这个过滤器工厂的作用,就是添加请求头。

使用示列:

spring:
  cloud:
    gateway:
      routes:
      - id: fsh-house
        uri: lb://fsh-house
        predicates:
        - Path=/house/**
        filters:
        - AddRequestHeader=NAME, yinjihuan

上面的配置,我们针对fsh-house这个服务的路由配置了AddRequestHeader,增加了一个名称为NAME,值是yinjihuan的请求头。

这样配置之后,在fsh-house服务中的所有接口,都可以通过request来获取到NAME请求头的信息,代码如下:

@GetMapping("/hello")
public String hello(HttpServletRequest request) throws  Exception {
    System.err.println(request.getHeader("NAME"));
    return "Hello"+serverPort;
}

如果我们需要传递多个请求头咋配置?

 filters:
        - AddRequestHeader=NAME, yinjihuan
        - AddRequestHeader=NAME2, yinjihuan2

配置2个过滤器就行了,是不支持一个过滤器配置多个请求头的方式,原因我们通过源码可以得出,请看源码:

public class AddRequestHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {

    @Override
    public GatewayFilter apply(NameValueConfig config) {
        return (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest().mutate()
                    .header(config.getName(), config.getValue())
                    .build();

            return chain.filter(exchange.mutate().request(request).build());
        };
    }

}

NameValueConfig就2个字段,一个name,一个value,对应的也就是请求头的名称和值。

类似的工厂类还有AddRequestParameter和AddResponseHeader,RemoveRequestHeader,RemoveResponseHeader,这几个就不做单独讲解了,使用方式是一样的。一个是添加请求参数,一个是添加响应的请求头。

AddRequestParameter配置示列:

 filters:
        - AddRequestParameter=name, yinjihuan

AddResponseHeader配置示列:

 filters:
        - AddResponseHeader=name, yinjihuan

原文发布于微信公众号 - 猿天地(cxytiandi)

原文发表时间:2018-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第四节 - 编写第一个Servlet程序

39260
来自专栏木子昭的博客

靠谱的 关闭Windows10自动更新第一步:获取本地网络属性修改权限第二步:将本地网络设置为按流量计费

自从Windows10发布后, 如何关闭Windows10的自动更新, 就是一个长盛不衰的话题, 后来微软看可爱的用户们讨论的这么开心, 就直接把关闭自动更新...

40890
来自专栏程序员互动联盟

【专业技术】8大你不得不知的Android调试工具

1. 查看当前堆栈 1) 功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系 2) 方法: new Exception(“print ...

706130
来自专栏码神联盟

Spring Boot 之Application.properties配置大全

前几期,我们讲到了Spring Boot的框架,动手操作过的人,应该都还记得,并且觉得确实简化了很多,那么对于其中application.properties的...

4K90
来自专栏Netkiller

Elasticsearch Cluster 安装与配置

本文节选自《Netkiller Database 手札》作者:netkiller 网站: http://www.netkiller.cn 23.1.2. Ela...

38450
来自专栏非著名程序员

Android BLE 基础框架全新改版

? Android BLE基础操作框架,基于回调,操作简单。包含扫描、多连接、广播包解析、服务读写及通知等功能。 项目地址:https://github.co...

38070
来自专栏美团技术团队

Linux与JVM的内存关系分析

引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux...

1K70
来自专栏潇涧技术专栏

One Trip of building a Crawler

最近需要从网上抓取大量的数据,于是体验了一下爬虫程序的开发和部署,主要是学会了一些实用工具的操作。

15620
来自专栏好好学java的技术栈

java工程师必备linux常用命令,这篇文章就够了

bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)...

34610
来自专栏左瞅瞅,右瞅瞅

Linux LVM简明教程

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可...

44510

扫码关注云+社区

领取腾讯云代金券