ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

9-Gateway服务网关

2022-06-26 12:32:37  阅读:169  来源: 互联网

标签:网关 服务 请求 过滤器 Gateway 路由 跨域


网关简介

网关用来拦截所有从客户端访问的请求,进行身份的验证以及具体服务的路由,再就是负载均衡,服务限流等功能:
image
网关就是对服务的一种保护,保护服务的访问量以及敏感数据权限管理等。
网关可以用gateway和zuul来实现:
image
image

搭建网关

创建新的项目并继承付父项目引入依赖:
image

网关是作为一个服务要注册到nacos的,所以要引入nacos客户端依赖并注册到nacos。
在此项目的配置文件中,将服务注册到nacos,并且配置路由的相关信息:
image
其中routes中要写一个对象,其中uri可以写路径,或者些lb类型路径,lb类型路径能够提供负载均衡功能,而路径只是单纯的访问没有负载功能。
image

配置中还要存在断言集合,也就是路径在符合某种格式的前提下访问到uri所指定的服务中去。
image
未来访问的时候,都要从网关端口去访问,而不直接访问服务了。

网关中并没有任何业务实现,只是将请求分发到其他服务中:
image

小总结:
image

断言工厂

断言也就是路径在符合某种格式的前提下访问到uri所指定的服务中去。
image

image
image

断言工厂的具体配置内容可以在Spring官网上查看:
image

同一个服务可以有多个路由方式:
image

如果任何一个工厂断言不符合都无法正常访问,当所有都不符合则404返回,多个符合的情况下以靠前的条件为准。

路由/网关过滤器

介绍

过滤器工厂主要就是对请求及响应做操作,可以操作请求头请求体等内容,并且过滤器工厂有很多个:
image
image

具体的过滤器工厂可以从Spring官网查看:
image

实践

image
在控制层中可以通过注解获取请求头信息
image
其中requestheaderi表示从请求头中获取信息,required表示此参数不是必填的,也就是可以不携带此请求头。

如果对所有的服务都添加同一个请求头,可以使用默认过滤器来完成:
image

小总结:
image

全局过滤器

全局过滤器也是用于处理所有进入网关的请求和响应,实际上和上文的默认过滤器是一样的。区别在于全局过滤器可以自定义代码实现,而上文的过滤器是固定的处理逻辑。

具体的实现方案就是实现GlobalFilter接口:
image
exchange表示请求上下文,请求和响应都可以从中获取,chain就是过滤器中的过滤链,可以放行此过滤。

进行判断用户身份:
image

下文是过滤器的整体代码,其中request对象通过exchenge来获得,其中getFirst方法表示获取到第一个匹配的参数。
当鉴权失败的时候,可以直接返回setConplete方法,但是为了严谨,在请求头中添加了StatusCode为未登录401状态:
image

代码编写完成之后,还要对此类进行配置:
image
compnent表示注册为组件,order是用来对过滤器进行排序的。

过滤排序

一种方式是通过Order注解来完成,还有一种方式可以继承Orderd接口,实现其中的方法来返回排序数字。
全局过滤器一定要有order顺序!!!
image

小总结:
image

多种过滤器执行顺序

上文讲了三中过滤器,一个是服务路由过滤器,一个默认过滤器(在路由过滤器里讲的),还有全局过滤器。
在请求路由后,因为只有发送请求来确定路由后才能确定走哪条过滤器。执行顺序如下图:
image

虽然三种过滤器都是不同类型的,但是还是可以存在于一个过滤器链路中的。
其中路由过滤器和默认过滤器配置方式相似,最终产生的对象都由AddRequestHeaderGatewayFilterFactory来生产,都叫GateWayFilter。
后来的全局过滤器会经过FilteringWebHandler类中的GatewayFilterAdapter进行适配:
image
此类通过适配器模式将全局过滤器GlobalFilter转换成了GatewayFilter进行适配,并将过滤器加入了过滤链中。
image

所谓的声明顺序,也就是路由过滤器和默认过滤器在filters属性中添加的元素的顺序:
image

当不同类型的过滤器的order值相同时,将采用以下执行顺序:
image

image

cors跨域配置

image

cors的本质就是浏览器跨域前询问目标服务器是否可以跨域,然后再决定是否进行访问。
跨域只需要从gateway做配置即可:
image

询问是否跨域的请求是options类型,其中add to simple url handler mapping表示放开询问请求。

跨域有效期内,浏览器无需再次询问,可以直接跨域,这样可以解决频繁询问导致的多次请求缓慢的问题。

标签:网关,服务,请求,过滤器,Gateway,路由,跨域
来源: https://www.cnblogs.com/agoodjavaboy/p/16413283.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有