之前zuul 网关介绍。他有过滤器周期是四种,也是四种类型的过滤器。而gateway 只有俩种过滤器:“pre” 和 “post”。

  • PRE: 这种过滤器在请求被路由之前调用。
  • POST:这种过滤器在路由到微服务以后执行。

这俩种过滤器是不是很熟悉。其实和zuul的过滤器很像。

但是gateway 过滤器又可以分为俩种。GatewayFilter 与 GlobalFilter。

  • GlobalFilter 全局过滤器
  • GatewayFilter 将应用到单个路由或者一个分组的路由上。

还有内置的过滤器断言机制。在上一篇已经做过介绍。本篇就不在介绍。

同样全局过滤器也在上一篇列举了全局过滤器的一种写法,有兴趣的同学可以回过头看一下。

自定义过滤器

创建ServerGatewayFilter 类

package com.xian.cloud.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; /**
* <Description>
*
* @author xianliru@100tal.com
* @version 1.0
* @createDate 2019/11/07 17:34
*/
@Slf4j
public class ServerGatewayFilter implements GatewayFilter, Ordered { @Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("ServerGatewayFilter filter ");
return chain.filter( exchange );
}
@Override
public int getOrder() {
return 0;
}
}

创建 GatewayRoutesConfiguration

package com.xian.cloud.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* <Description>
*
* @author xianliru@100tal.com
* @version 1.0
* @createDate 2019/11/08 09:45
*/
@Configuration
@Slf4j
public class GatewayRoutesConfiguration {
/**
* java 配置 server 服务路由
* @param builder
* @return
*/
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
log.info("ServerGatewayFilter filtet........");
return builder.routes()
.route(r ->
r.path("/server/**")
.filters(
f -> f.stripPrefix(1)
.filters(new ServerGatewayFilter())
)
.uri("lb://cloud-discovery-server")
)
.build();
}
}

启动服务

gateway 服务日志打印

[2019-11-08 11:07:17.357] [] [] [] [] [INFO ] com.xian.cloud.filter.GatewayRoutesConfiguration - ServerGatewayFilter filtet........

命令行 curl http://localhost:9000/server/server/hello?name=tom 返回 hello tom age = 20

日志打印

[2019-11-08 11:08:09.966] [] [] [] [] [INFO ] com.xian.cloud.filter.AuthorizeFilter - AuthorizeFilter token 全局过滤器 token:null,uid:null
[2019-11-08 11:08:09.970] [] [] [] [] [INFO ] com.xian.cloud.filter.ServerGatewayFilter - ServerGatewayFilter filter

我们看到日志已经打印我们想看到的日志。

优先级

java配置方式与yml文件配置。java配置优先级更高。亲测

整理 断言 和 自定义过滤器

  • 断言 其实断言的作用是不是要将请求路由到服务上,是不是符合条件。就像玩过山车危险游戏一样,会有年龄,体重、病史的一些限制。
  • 过滤器 就还是过山车的案例,你符合了条件。那么好,我要给你带上安全带等一些安全保护措施,才能让你真正的玩耍。道理是相同的。

gateway 的断言和过滤器提供如此丰富的内置断言和过滤器。让我们有非常丰富的组合模式,应对我们实际开发的场景。还可以根据具体的场景做一些特殊处理。

2.2.X版本 gateway 增加了类似于注册中心的元数据。在gateway 配置一下元数据。带着数据请求到下游服务。有兴趣的同学可以去官网查看官方文档。

如何喜欢可以关注分享本公众号。

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

最新文章

  1. compass reset和layout [Sass和compass学习笔记]
  2. tornado学习笔记18 _RequestDispatcher 请求分发器
  3. Mono.Ceil 无法保存Silverlight 程序集
  4. MySQL初步笔记,有待整理
  5. Qt修改xml文件
  6. javaSE第八天
  7. Windows7 QT5.6.0(64位)使用mysql(64位)环境搭建详解
  8. Java——单例设计模式
  9. DotNet 资源大全(Awesome最新版)
  10. Python标准库--Scope
  11. SecurityError:Error #2048:安全沙箱冲突
  12. IIC - 【转载】对I2C总线的时钟同步和总线仲裁的深入理解
  13. rest_framework框架
  14. php背景图片上生成二维码,二维码上带logo 代码示例 (原)
  15. 机器学习入门-提取文章的主题词 1.jieba.analyse.extract_tags(提取主题词)
  16. go语言进阶之为结构体类型添加方法
  17. ASP.NET与ASP.NET MVC 中Cache的总结
  18. 隐藏的Swiper显示后无法获取正确的宽度和高度
  19. 【LESS系列】内置函数说明
  20. 【Android入门】——模拟器的创建及常见问题汇总

热门文章

  1. 【网络安全】给你讲清楚什么是XSS攻击
  2. 快学Scala 第十一课 (类继承)
  3. 值类型不允许赋值为Null
  4. win10 php安装redis 扩展
  5. Nginx开启Gzip压缩提升页面加载速度
  6. XCTF-web2
  7. PCA 算法核心:高维度向量向低维度投影
  8. Elasticsearch Java API 很全的整理
  9. scipy.misc.toimage()出现toimage报错
  10. MySQL时间盲注五种延时方法 (PWNHUB 非预期解)