Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通

过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器

3.3.1 过滤器基础

(1) 过滤器的生命周期

Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么丰富,它只有两个:“pre” 和 “post”。

PRE : 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择

请求的微服务、记录调试信息等。

POST :这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP

Header、收集统计信息和指标、将响应从微服务发送给客户端等。

( 2) 过滤器类型

Spring Cloud Gateway 的 Filter 从作用范围可分为另外两种GatewayFilter 与 GlobalFilter。

GatewayFilter :应用到单个路由或者一个分组的路由上。

GlobalFilter :应用到所有的路由上。

3.3.2 局部过滤器

局部过滤器(GatewayFilter),是针对单个路由的过滤器。可以对访问的URL过滤,进行切面处理。在

Spring Cloud Gateway中通过GatewayFilter的形式内置了很多不同类型的局部过滤器。这里简单将

Spring Cloud Gateway内置的所有过滤器工厂整理成了一张表格,虽然不是很详细,但能作为速览使

用。如下:

每个过滤器工厂都对应一个实现类,并且这些类的名称必须以 GatewayFilterFactory 结尾,这是

Spring Cloud Gateway的一个约定,例如 AddRequestHeader 对应的实现类为

AddRequestHeaderGatewayFilterFactory 。对于这些过滤器的使用方式可以参考官方文档

3.3.3 全局过滤器

全局过滤器(GlobalFilter)作用于所有路由,Spring Cloud Gateway 定义了Global Filter接口,用户

可以自定义实现自己的Global Filter。通过全局过滤器可以实现对权限的统一校验,安全性验证等功

能,并且全局过滤器也是程序员使用比较多的过滤器。

Spring Cloud Gateway内部也是通过一系列的内置全局过滤器对整个路由转发进行处理如下:

3.4 统一鉴权

内置的过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们自己

编写过滤器来实现的,那么我们一起通过代码的形式自定义一个过滤器,去完成统一的权限校验。

3.4.1 鉴权逻辑

开发中的鉴权逻辑:

当客户端第一次请求服务时,服务端对用户进行信息认证(登录)

认证通过,将用户信息进行加密形成 token,返回给客户端,作为登录凭证

以后每次请求,客户端都携带认证的 token

服务端对 token进行解密,判断是否有效。

如上图,对于验证用户是否已经登录鉴权的过程可以在网关层统一检验。检验的标准就是请求中是否携

带token凭证以及token的正确性。

3.4.2 代码实现

下面的我们自定义一个GlobalFilter,去校验所有请求的请求参数中是否包含“token”,如何不包含请求

参数“token”则不转发路由,否则执行正常的逻辑。

/*** 自定义一个全局过滤器

* 实现 globalfilter , ordered接口*/@Componentpublic class LoginFilter implementsGlobalFilter,Ordered {/*** 执行过滤器中的业务逻辑

* 对请求参数中的access-token进行判断

* 如果存在此参数:代表已经认证成功

* 如果不存在此参数 : 认证失败.

* ServerWebExchange : 相当于请求和响应的上下文(zuul中的RequestContext)*/@Overridepublic Monofilter(ServerWebExchange exchange, GatewayFilterChain chain) {

System.out.println("执行了自定义的全局过滤器");//1.获取请求参数access-token

String token = exchange.getRequest().getQueryParams().getFirst("access-token");//2.判断是否存在

if(token == null) {//3.如果不存在 : 认证失败

System.out.println("没有登录");

exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete(); //请求结束

}//4.如果存在,继续执行

return chain.filter(exchange); //继续向下执行

}/*** 指定过滤器的执行顺序 , 返回值越小,执行优先级越高*/@Overridepublic intgetOrder() {return 0;

}

}

gateway中的局部过滤器_GateWay过滤器相关推荐

  1. gateway中的局部过滤器_Spring Cloud Gateway中的过滤器工厂:重试过滤器

    Spring Cloud Gateway基于Spring Boot 2,是Spring Cloud的全新项目,该项目提供了一个构建在Spring 生态之上的API网关.本文基于的Spring Clou ...

  2. gateway中的局部过滤器_vue 过滤器

    vue 过滤器 1 关于 vue 过滤器 在vue1.0的时候其实是内置了过滤器的,但是考虑到好多过滤器并不一定会被开发所调用,所以把原本内置的过滤器就给去掉了,但是过滤器还是比较普遍的,所以我们从v ...

  3. SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)

    文章目录 一.一切要从Servlet说起 1.1什么是Servlet 1.2为什么需要Servlet 1.3Servlet如何响应用户请求 1.4Servlet与Tomcat处理请求的流程 1.5Se ...

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

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

  5. VUE中的模板语法以及过滤器和双向数据绑定

    目录: 1. 模板语法 1.1 插值 1.1.1 文本 1.1.2 html 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.1.1 v-if |v-else-if| ...

  6. SpringCloud 组件Gateway服务网关【断言工厂过滤器工厂】

    目录 1:断言工厂 2:过滤器工厂 2.1:路由过滤器的种类 2.2:请求头过滤器 2.3:默认过滤器 2.4:总结 1:断言工厂 路由断言工厂Route Predicate Factory 路由配置 ...

  7. php中怎么过滤器_PHP 过滤器

    PHP 过滤器 PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入. 什么是 PHP 过滤器? PHP 过滤器用于验证和过滤来自非安全来源的数据. 测试.验证和过滤用户输入或自定义数据是 ...

  8. SpringMVC中的拦截器、过滤器的区别、处理异常

    SpringMVC中的拦截器.过滤器的区别.处理异常 参考文章: (1)SpringMVC中的拦截器.过滤器的区别.处理异常 (2)https://www.cnblogs.com/ahaijava/p ...

  9. Spring Cloud Gateway中session共享

    Spring Cloud Gateway中session共享 背景 在进行zuul切换到gateway时,需要重新实现session共享,本文主要分享一下自己实现的方案. zuul中的session共 ...

  10. filter过滤器_Java过滤器Filter讲解(Java基础)

    Java过滤器Filter讲解(Java基础)    双体的小伙伴们,Java过滤器Filter讲解(Java基础).初学JAVA的的学者们,今天满满的干货,跟随我一起学习吧.      超能就在这里 ...

最新文章

  1. 共阳极数码管动态扫描c语言,《C语言编程实训》实训指导书三
  2. windows域中时间同步的解决方案
  3. 线程:创建--【J2SE】
  4. Redis在APP中的应用
  5. html多重边框,中间空白,CSS实现多重边框
  6. Enlarge GCD CodeForces - 1034A(欧拉筛+最大公约数)
  7. c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...
  8. [html] 对一个元素设置浮动后,它的特征是什么?
  9. 数据中台:不是产品,不是技术,到底是什么?(附完整PPT下载)
  10. 99%的程序员都在用Lombok,原理竟然这么简单?
  11. MFCC/Filter Bank的提取流程
  12. Java设计模式笔记------设计原则完结
  13. 可以联机的的单机游戏
  14. matlab汽车牌的识别,matlab车牌号识别
  15. 网络爬虫-抓取酷航机票信息
  16. 【WAF剖析】——文件上传之安全狗bypass
  17. 利用SRS搭建直播服务器
  18. STEP标准描述方法-EXPRESS语言
  19. [问题已处理]-helm提示kubernetes configuration file is group-readable
  20. YAML——基本语法

热门文章

  1. getvod.php_网站漏洞修复之苹果cms电影系统
  2. 杰理之串口1使用固定引脚的配置方法【篇】
  3. 【最佳实践】瀚高数据库安全版v4.5.8非root用户运行的安装配置
  4. 【HTML】-- 用户注册表单
  5. php转调页面,转调踏莎行上巳道中作
  6. APP上查个人信用报告靠谱吗?
  7. java课程设计 计算器_Java课程设计-计算器
  8. 网络安全面试常见问题
  9. js实现当日期转农历日期
  10. mysql按时间查询的优化_Mysql根据时间查询日期的优化技巧