Gateway网关-全局过滤器
全局过滤器
上一节学习的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。
全局过滤器作用
全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。
定义方式是实现GlobalFilter接口。
public interface GlobalFilter {/*** 处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下一个过滤器处理** @param exchange 请求上下文,里面可以获取Request、Response等信息* @param chain 用来把请求委托给下一个过滤器 * @return {@code Mono<Void>} 返回标示当前过滤器业务结束*/Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}
在filter中编写自定义逻辑,可以实现下列功能:
登录状态判断
权限校验
请求限流等
自定义全局过滤器
需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:
参数中是否有authorization,
authorization参数值是否为admin
如果同时满足则放行,否则拦截
实现:
在gateway中定义一个过滤器:
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();// 2.获取authorization参数String auth = params.getFirst("authorization");// 3.校验if ("admin".equals(auth)) {// 放行return chain.filter(exchange);}// 4.拦截// 4.1.禁止访问,设置状态码exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);// 4.2.结束处理return exchange.getResponse().setComplete();}
}
Gateway网关-全局过滤器相关推荐
- java 配置全局过滤器,如何为Spring Cloud Gateway加上全局过滤器
既然是一个网关.那么全局过滤器肯定是少不了的一个存在.像是鉴权.认证啥的不可能每个服务都做一次,一般都是在网关处就搞定了. Zuul他就有很强大的过滤器体系来给人使用. Gateway当然也不会差这么 ...
- Gateway自定义全局过滤器
一.Gateway全局过滤器 1.全局过滤器(Global Filters)简介 Gateway过滤器在实现方式上,有两种过滤器: GatewayFilter(局部过滤器/网关过滤器): 需要通过 s ...
- GateWay 网关路由过滤器配置
GatewayFilter 是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理. Spring提供了31种不同的路由过滤器工厂. 官方文档:Spring Cloud Gateway ...
- Gateway网关---Filter过滤器
官网关于过滤器的文档地址https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gatewayfilter-factori ...
- 服务网关(Gateway)自定义全局过滤器统一Token处理
网关登录校验 在网关工程中添加全局过滤器 import com.alibaba.fastjson.JSON; import com.xuecheng.commons.model.vo.AuthIn ...
- SpringCloud微服务架构之,Hystrix 熔断器,Gateway 网关
Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). pom依耐 <!-- hystrix -->&l ...
- gateway网关服务的高级配置
源码:学习demo: 关于学习的所有代码 目录: gateway网关的断言工厂 gateway网关的过滤器工厂 gateway网关的全局过滤器,即可以自定义业务代码的过滤器 一.gateway网关的断 ...
- Gateway网关-过滤器链执行顺序
过滤器执行顺序 请求进入网关会碰到三类过滤器:当前路由的过滤器.DefaultFilter.GlobalFilter 请求路由后,会将当前路由过滤器和DefaultFilter.GlobalFilte ...
- SpringCloud Gateway 服务网关,过滤器
SpringCloud Gateway 过滤器有 pre 和 post 两种方式,请求首先经过 pre 过滤器处理,成功后被转发到对应的服务,然后经过 post 过滤器处理,将结果返回客户端.这种机制 ...
最新文章
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- 怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
- 2013电大计算机应用基础试题及答案,[2017年电大]电大2013年计算机应用基础试题及答案[呕心沥血整理].doc...
- 祝贺!王春雨入职一个月晋升副教授
- 查找算法(一)顺序查找
- vscode设置go环境
- OpenCV读取多幅图片,读取系列图片,读取文件夹中指定图像类型的系列图片
- 将某表某列数据复制到另一张表的某列
- 红米 刷机 android7.1,有没有红米note3全网通的android7.1刷机包
- win7台式计算机型号怎么查,win7系统电脑查看主板型号的四种方法
- 学习笔记(01):3华为工程师 ,带你实战C++(2018版)-09面向对象的思想实战
- BUG Flink报Timeout of 60000ms expired before the position for partition could be determined
- 三种方式实现电脑端同时登陆多个微信
- 软件测试周刊(第07期):每个人都是天才
- PHPCMS二次开发教程
- 静态常量池、运行时常量池、字符串常量池
- struts2 运行原理 面试必考题
- 检测三维物体?一篇文章认识《双目立体视觉》
- 2021-2027全球与中国半电池太阳能电池板市场现状及未来发展趋势
- 4.Unity2D 横版 帧事件+攻击判定+冲砍挑飞+更真实的打击