愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第1集 进阶掌握 SpringCloud Gateway配置和交互流程
第2集 微服务SpringCloud Gateway内置路由断言讲解
第5集 【高级篇】案例实战之网关Gateway全局过滤器实现用户鉴权
第1集 进阶掌握 SpringCloud Gateway配置和交互流程
简介:讲解SpringCloud Gateway架构流程
-
网关的配置项回顾
- 路由:是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发
route组成部分 id:路由的ID uri:匹配路由的转发地址 predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。 order:路由的优先级,数字越小,优先级越高。
-
交互流程
- 客户端向Spring Cloud Gateway发出请求
- 如果网关处理程序映射确定请求与路由匹配
- 则将其发送到网关Web处理程序
- 通过特定过滤器链运行,前置处理-后置处理
第2集 微服务SpringCloud Gateway内置路由断言讲解
简介:讲解Gateway内置的路由断言
-
什么是Gateway路由断言
- Predicate 来源于Java8,接受输入参数,返回一个布尔值结果
- Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则
- 转发的判断条件,SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等
- 支持多个
Predicate
请求的转发是必须满足所有的Predicate
后才可以进行路由转发
-
内置路由断言介绍 RoutePredicateFactory 接口实现类
-
参数编写规则 XXXRoutePredicateFactory,使用XXX作为参数配置, 例如下面
predicates: - Host= - Path= - Method= - Header= - Query= - Cookie=
第3集 Gateway内置断言实现接口定时下线实战
简介:Gateway内置的路由接口定时下线实战
-
需求:接口需要在指定时间进行下线,过后不可以在被访问
- 使用Before ,只要当前时间小于设定时间,路由才会匹配请求
- 东8区的2020-09-11T01:01:01.000+08:00后,请求不可访问
- 为了方便测试,修改时间即可
predicates:
- Before=2020-09-09T01:01:01.000+08:00
第4集 玩转SpringCloud Gateway过滤器
简介:讲解Gateway过滤器
- 什么是网关的过滤器
-
过滤器生命周期
- PRE: 这种过滤器在请求被路由之前调用,一般用于鉴权、限流等
- POST:这种过滤器在路由到微服务以后执行,一般用于修改响应结果,比如增加header信息、打点结果日志
-
网关过滤器分类
- 局部过滤器GatewayFilter:应用在某个路由上,每个过滤器工厂都对应一个实现类,并且这些类的名称必须以 GatewayFilterFactory 结尾
- 全局过滤器:作用全部路由上,
-
内置很多局部过滤器,顶级接口 GatewayFilterFactory,
- 内置很多全局过滤器,顶级接口 GlobalFilter
第5集 【高级篇】案例实战之网关Gateway全局过滤器实现用户鉴权
简介:讲解Gateway全局过滤器实现用户鉴权
-
业务流程
-
自定义全局过滤器实现鉴权
@Component
public class UserGlobalFilter implements GlobalFilter,Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("token");
System.out.println(token);
if(StringUtils.isBlank(token)){
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
//继续往下执行
return chain.filter(exchange);
}
//数字越小,优先级越高
@Override
public int getOrder() {
return 0;
}
}
- 路径 :http://localhost:8888/order-server/api/v1/video_order/list?source=wechat
- 注意:网关不要加太多业务逻辑,否则会影响性能,务必记住