• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

9-Gateway服务网关

武飞扬头像
agoodjavaboy_dev
帮助2

网关简介

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

搭建网关

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

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

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

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

小总结:
学新通

断言工厂

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

学新通
学新通

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

同一个服务可以有多个路由方式:
学新通

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

路由/网关过滤器

介绍

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

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

实践

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

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

小总结:
学新通

全局过滤器

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

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

进行判断用户身份:
学新通

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

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

过滤排序

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

小总结:
学新通

多种过滤器执行顺序

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

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

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

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

学新通

cors跨域配置

学新通

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

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

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhieecij
系列文章
更多 icon
同类精品
更多 icon
继续加载