基于SpringCloud GateWay 3.1.2 版本

  • 内置过滤器

    Spring Cloud GateWay 内置了下图中的过滤器,具体的内置过滤器如何使用,可参考官网文档,描述都很简单,本文重点在自定义过滤器的使用中

  • 自定义过滤器

官网文档地址:点击打开

创建自定义过滤器类,实现GlobalFilter, Ordered。并实现filter、getOrder两个方法。

getOrder方法返回 【-2147483648~2147483647】范围内的一个整数,数值越小优先级越高,越先执行。

filter方法,则是我们这个过滤器要处理的业务逻辑。该方法有两个参数ServerWebExchange exchange, GatewayFilterChain chain。

ServerWebExchange接口中主要是获取当前请求的request、response、attributes

通过exchange.getRequest()方法,可获取到请求发送的一些参数等信息。

通过exchange.getResponse()方法,可对当前请求进行处理,根据具体的业务逻辑调用是否直接返回某些信息。

通过chain.filter(exchange)方法,对当前请求进行放行。


/*** @author songzerong* @desc 自定义GateWay过滤器 DemoFilter*/
@Component
@Slf4j
public class DemoFilter implements GlobalFilter, Ordered {@SneakyThrows@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("demo global filter");String str = exchange.getRequest().getQueryParams().getFirst("str");if (null == str) {// 若请求参数为null,则返回一个状态码,前台处理,否则继续执行后续的操作ServerHttpResponse response = exchange.getResponse();boolean b = response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);if (b) {return exchange.getResponse().setComplete();} else {throw new Exception("设置状态码出错");}}return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}

若请求地址不带请求参数,则进入filter会直接返回405错误码。

若请求地址带请求参数,则进入filter则会放行,并继续执行后续处理逻辑。

将自定义过滤器加入Spring容器,有两种方式一种是直接在过滤器类中添加@Component注解,另一种是官方文档中写的,通过添加@Bean注解的形式进行注入使用。


/*** @author songzerong* @desc 自定义GateWay过滤器 DemoFilter*/
@Slf4j
public class DemoFilter implements GlobalFilter, Ordered {@Beanpublic GlobalFilter demoFilter(){return new DemoFilter();}@SneakyThrows@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("demo global filter");String str = exchange.getRequest().getQueryParams().getFirst("str");if (null == str) {// 若请求参数为null,则返回一个状态码,前台处理,否则继续执行后续的操作ServerHttpResponse response = exchange.getResponse();boolean b = response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);if (b) {return exchange.getResponse().setComplete();} else {throw new Exception("设置状态码出错");}}return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}

至此,自定义过滤器添加完成。

Spring Cloud GateWay——Filter过滤器相关推荐

  1. Spring Cloud Gateway(过滤器)

    在上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由.本篇我们将关注它的另一个功能:过滤器. Spring Cloud Gateway 已经内置了很多实 ...

  2. Spring Cloud Gateway(一)为什么用网关、能做什么、为什么选择Gateway、谓词工厂、过滤器配置

    1.为什么用网关?能做什么?为什么选择Gateway? 1.1.为什么用网关 网关api:封装了系统内部架构,为每个客户端提供一个定制的 API.在微服务架构中,服务网关的核心要点是,所有的客户端和消 ...

  3. Spring Cloud Gateway(十):网关过滤器工厂 GatewayFilterFactory

    本文基于 spring cloud gateway 2.0.1 1.GatewayFilterFactory 简介 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应. 路径过滤器的范 ...

  4. Spring Cloud Gateway 入门

    认识 Spring Cloud Gateway Spring Cloud Gateway 是一款基于 Spring 5,Project Reactor 以及 Spring Boot 2 构建的 API ...

  5. Spring Cloud Gateway(限流)

    在高并发的应用中,限流是一个绕不开的话题.限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击. 一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池.线程池).限制瞬时并 ...

  6. Spring Cloud Gateway介绍(二)

    Spring Cloud Gateway介绍(一) 全局Filters GlobalFilter与GatewayFilter具有一样的接口. 这些全局过滤器都有对应的配置类,例如: org.sprin ...

  7. Spring Cloud Gateway介绍(一)

    特性 基于 Java 8 编码 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建 支持动态路由,能够匹配任何请求属性上的路由 支 ...

  8. 网关Spring Cloud Gateway科普

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 欢迎跳转到本文的原文链接:https://honeypp ...

  9. Spring Cloud Gateway一次请求调用源码解析

    简介: 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单.有效,很多组件的设计都非常值得学习,本文就Spring Cloud Gateway做一个简单的介绍,以及 ...

最新文章

  1. 要写好业务代码,也没这么简单!
  2. HP CloudSystem:几分钟完成云系统配置
  3. 中国机器人产业发展报告(2019)正式发布!
  4. JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网
  5. 【HDU1582 HDU1452 HDU1098 HDU3524 HDU1005 HDU2623 HDU2674】
  6. Windows 7 扩展玻璃效果(Aero Glass)
  7. Redis的RDB持久化和AOF持久化区别
  8. 2019ICPC(徐州) - Loli, Yen-Jen, and a cool problem(广义后缀自动机)
  9. 什么是工资单上的variable pay mix?
  10. readyState的五种状态详解【转】
  11. c语言程序设计主编张玉生教材答案,清华大学出版社-图书详情-《Visual Basic程序设计实验指导》...
  12. html 样式优先级,CSS样式优先级
  13. python complex 如何取出实数部分_【PYthon报错】np.complex128数字的虚数部分为0j
  14. php stomp rabbitmq,php实现通过stomp协议连接ActiveMQ操作示例
  15. EndnoteX7插入文献时,提示“访问未命名的文件时尝试越过其结尾”的解决方法
  16. MATLAB数值计算——矩阵的逆、矩阵的特征值、矩阵的特征多项式
  17. Java服务器环境搭建(JDK+TOMCAT)
  18. “晨光”老矣,尚能饭否?
  19. MySql作业练习题
  20. 容器环境下如何将NuGet包XML文档添加到Swagger

热门文章

  1. Bruce Eckel:再聊设计模式(篇五)改变接口
  2. 拒绝翻车!网购手机验机指南!如何防止买到后封机、退货机、翻新机
  3. 解决:mysql服务启动后自动停止
  4. 没学c语言可以学python_没学过c语言 可以直接学Python吗
  5. 社群运营的本质是什么?
  6. ct诊断报告.html,CT诊断报告模板大全
  7. 2019.09 网易面试小结
  8. 5-1HFSS边界条件
  9. SRS服务器搭建以及展现配置说明
  10. Lazarus上好用的 Indy TCP client 组件