前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloudGateway笔记(2)-filter与自定义filter

SpringCloudGateway笔记(2)-filter与自定义filter

作者头像
yingzi_code
发布2019-08-30 22:12:59
2.1K0
发布2019-08-30 22:12:59
举报
文章被收录于专栏:生活不止眼前的代码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/yingziisme/article/details/90357292

filter与自定义filter

过滤器可以在路由请求之前对请求进行处理,也可以在请求响应之后对响应进行处理

在请求路由之前可以做比如参数校验,鉴权,日志记录,协议转换,请求参数修改,路径修改等

在请求响应之后可以做比如记录响应消息,修改响应,修改响应头等

最常见的功能就是鉴权,日志记录,限流和权重路由

Filter分为Gateway Filter和Global Filter

Gateway Filter 是可以指定对某个路由进行过滤操作,自带的Gateway Filter如下

AddRequestHeader

作用

AddRequestHeader

添加请求header

AddRequestParameter

添加请求参数

AddResponseHeader

添加响应header

DedupeResponseHeader

响应头去重

Hystrix GatewayFilters

断路器的网关

PrefixPath

路径匹配

PreserveHostHeader

发送原始host

RequestRateLimiter

限流

RedirectTo

重定向

RemoveHopByHopHeadersFilter

移除响应header,默认有Connection,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,TE,Trailer,Transfer-Encoding,Upgrade

RemoveRequestHeader

移除请求header

RemoveResponseHeader

移除响应header

RewritePath

路径重写

RewriteResponseHeader

重写响应header

SaveSession

保存session

SetPath

模板匹配路径修改

SetResponseHeader

设置响应header,会覆盖所有原有的header

SetStatus

设置httpStatus响应码

StripPrefix

去掉前缀

Retry

重试次数

RequestSize

请求大小限制

ModifyRequestBody

修改请求体

ModifyResponseBody

修改响应体

写个demo测试一下
代码语言:javascript
复制
      routes:
        - id: spring-cloud-client-demo
          url: lb://spring-cloud-client-demo
          predicates:
            - Path=/client/**
          filters:
            - AddRequestHeader=X-Request-Foo, Bar
            - StripPrefix=1

使用Postman发送请求

GET http://localhost:10001/client/demo/get?param=aaa

可以看到请求被转发到spring-cloud-client-demo的/demo/get?param=aaa

同时查看请求头打印,可以看到添加的请求头

代码语言:javascript
复制
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: accept, */*
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: postman-token, d90bc432-9861-4170-8c21-a66be561446f
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: accept-encoding, gzip, deflate
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: cache-control, no-cache
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-request-foo, Bar
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: user-agent, PostmanRuntime/7.4.0
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: forwarded, proto=http;host="localhost:10001";for="0:0:0:0:0:0:0:1:62526"
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-forwarded-for, 0:0:0:0:0:0:0:1
2019-05-18 11:03:17.501  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-forwarded-proto, http
2019-05-18 11:03:17.502  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-forwarded-prefix, /client
2019-05-18 11:03:17.502  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-forwarded-port, 10001
2019-05-18 11:03:17.502  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: x-forwarded-host, localhost:10001
2019-05-18 11:03:17.502  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: host, 192.168.56.1:8801
2019-05-18 11:03:17.502  INFO 13612 --- [nio-8801-exec-1] c.m.d.client.controller.DemoController   : header: content-length, 0

Global Filter是全局的过滤器,配置之后对所有路由都有效

过滤器

说明

LoadBalancerClientFilter

负载均衡过滤器

Netty Routing Filter

默认使用netty的底层

RouteToRequestUrlFilter

新的请求路由

Websocket Routing Filter

websocket路由

Gateway Metrics Filter

路由监控,配合spring-boot-starter-actuator

微服务使用·负载均衡用

代码语言:javascript
复制
uri: lb://spring-cloud-client-demo

websocket

代码语言:javascript
复制
uri: lb:ws://spring-cloud-client-demo

直接路由

代码语言:javascript
复制
uri:http:/xxxx.com
自定义全局过滤器
代码语言:javascript
复制
@Slf4j
@Component
public class MyFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("this is a pre filter");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            log.info("this is a post filter");
        }));
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

注:

  1. 这里的order不能使用@order 的注解
  2. 在fitler里面的是pre类型,会在路由前执行,在then里面的是post类型会在路由后执行
  3. order 的数值越小pre越先执行,post越后执行

再写一个filter测试一下

代码语言:javascript
复制
@Slf4j
@Component
public class MyFilter2 implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("this is a pre filter2");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            log.info("this is a post filter2");
        }));
    }

    @Override
    public int getOrder() {
        return -2;
    }
}

执行一个请求查看日志信息

代码语言:javascript
复制
2019-05-18 12:17:22.874  INFO 12996 --- [ctor-http-nio-3] com.mt.demo.gateway.filter.MyFilter2     : this is a pre filter2
2019-05-18 12:17:22.874  INFO 12996 --- [ctor-http-nio-3] com.mt.demo.gateway.filter.MyFilter      : this is a pre filter
2019-05-18 12:17:23.191  INFO 12996 --- [ctor-http-nio-3] com.mt.demo.gateway.filter.MyFilter      : this is a post filter
2019-05-18 12:17:23.191  INFO 12996 --- [ctor-http-nio-3] com.mt.demo.gateway.filter.MyFilter2     : this is a post filter2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年05月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最常见的功能就是鉴权,日志记录,限流和权重路由
  • 写个demo测试一下
  • 自定义全局过滤器
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档