当前位置: 首页 > news >正文

最全的Gateway统一网关快速入门

网关的作用
gateway 快速入门
断言工厂
过滤器工厂
全局过滤器
跨域问题

一:网关的作用 ?

网关功能:

        1.身份认证和权限校验

        2.服务路由、负载均衡

3.请求限流

网关的技术实现 :

        1.gateway:SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

        2.zuul:是基于Servlet的实现,属于阻塞式编程

二:gateway快速入门 

搭建网关服务的步骤:

1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:因为Gateway也是一个服务,也需要注册到nacos中。也可以使用eureka中。

        <!-- nacos服务注册发现依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--网关getway依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

2.编写路由配置及nacos地址:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**

网关搭建步骤:

1. 创建项目,引入 nacos 服务发现和 gateway 依赖
2. 配置 application.yml ,包括服务基本信息、 nacos 地址、路由

路由配置包括:

1. 路由 id :路由的唯一标示
2. 路由目标( uri ):路由的目标地址, http 代表固定地址, lb 代表根据服务名负载均衡
3. 路由断言( predicates ):判断路由的规则,
4. 路由过滤器( filters ):对请求或响应做处理

 三:路由断言工厂Route Predicate Factory

网关路由可以配置的内容包括:

1. 路由 id :路由唯一标示
2. uri :路由目的地,支持 lb http 两种
3. predicates :路由断言,判断请求是否符合要求,符合则转发到路由目的地
4. filters :路由过滤器,处理请求或响应

路由断言工厂

1. 我们在配置文件中写的断言规则只是字符串,这些字符串会被 Predicate Factory 读取并处理,转变为路由判断的条件
2. 例如 Path=/user/** 是按照路径匹配,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory 类来处理的
3. 像这样的断言工厂在 SpringCloudGateway 还有十几个
Spring 提供了 11 种基本的 Predicate 工厂,具体见springcloud官网。

 1.PredicateFactory的作用是什么?

读取用户定义的断言条件,对请求做出判断。

2.lPath=/user/**是什么含义?

路径是以/user开头的就认为是符合的。

四:路由过滤器 GatewayFilter 

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。Spring提供了31种不同的路由过滤器工厂。例如:

实现方式:在gateway中修改application.yml文件,路由添加过滤器: 

spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**filters: # 过滤器- AddRequestHeader=Truth, is very good! # 添加请求头.Truth相当妤key,后面为值。

 如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**default-filters: # 默认过滤器,会对所有的路由请求都生效- AddRequestHeader=Truth, is very good! # 添加请求头。Truth相当妤key,后面为值。
1.全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑

2.实现全局过滤器的步骤?
实现 GlobalFilter 接口
添加 @Order 注解或实现 Ordered 接口
编写处理逻辑

五:全局过滤器 GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。

区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。

定义方式是实现GlobalFilter接口。

例如下面案例:需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

参数中是否有 authorization
authorization 参数值是否为 admin

如果同时满足则放行,否则拦截

@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();}
}
1.全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑,可以处理自己的逻辑

2.实现全局过滤器的步骤?
实现 GlobalFilter 接口
添加 @Order 注解或实现 Ordered 接口
编写处理逻辑

过滤器执行顺序:

1. 每一个过滤器都必须指定一个 int 类型的 order 值, order 值越小,优先级越高,执行顺序越靠前。
2. GlobalFilter 通过实现 Ordered 接口,或者添加 @Order 注解来指定 order 值,由我们自己指定
3. 路由过滤器和 defaultFilter order Spring 指定,默认是按照声明顺序从 1 递增。
4. 当过滤器的 order 值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter 的顺序执行。
路由过滤器、defaultFilter 、全局过滤器的执行顺序?
order 值越小,优先级越高
order 值一样时,顺序是 defaultFilter 最先,然后是局部的路由过滤器,最后是全局过滤器

 六:跨域问题

跨域:域名不一致就是跨域,主要包括:

1. 域名不同: www.taobao.com www.taobao.org www.jd.com miaosha.jd.com
2. 域名相同,端口不同: localhost:8080 localhost8081

跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题

解决方案:CORS

spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求 - "http://localhost:8088"- "http://www.leyou.com"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

CORS跨域要配置的参数包括哪几个?

1.允许哪些域名跨域
2.允许哪些请求头
3.允许哪些请求方式
4.是否允许使用 cookie
5.有效期是多久
http://www.xdnf.cn/news/816697.html

相关文章:

  • Java中的方法递归
  • HDL FPGA 学习 - Avlon 总线,从端口传输、主端口传输,单周期、可变周期传输
  • 盘点那些免费的AI对话工具(国内篇):国内TOP3 AI聊天机器人产品介绍
  • Spring ResourceLoader.getResource() getResources()的理解
  • 史上最全最新Ubuntu安装教程(图文)
  • ECshop 模板制作教程
  • sql2000数据库挂起问题
  • physxloader.dll x86_physxloader.dll
  • C语言-常用数学函数
  • HTML+HTML5基础教程_笔记
  • ChinaSoft 论坛巡礼 | 移动软件工程论坛
  • Perl安装教程
  • 《Java小游戏实现》:贪吃蛇
  • Python基础教程,Python入门教程(非常详细)
  • 轻松破解加密网页
  • Ubuntu系统中Apache Web服务器的配置与实战
  • 权力的游戏第七季/全集Game of Thrones迅雷下载
  • 单点登录(SSO)详解——超详细
  • 思科最新版Cisco Packet Tracer 8.2.1安装
  • MicroNet实战:使用MicroNet实现图像分类(一)
  • 球幕投影有哪些常见的物理表现形式?
  • 超越极限V1.7
  • C++常用容器
  • 应用程序启动后修改自身EXE文件或自删除EXE文件(附VC++6.0源码)
  • 亚马逊分类目录(Dmoz目录)介绍与提交登陆说明
  • 【撸网站第一天】开篇
  • Preference,PreferenceCategory,PreferenceList,PreferenceCheckBox等控件的简单讲解
  • 【kali】WLAN识别
  • 单、双激光雷达启动与双激光雷达的外参标定(VLP-16)
  • 【UI设计No1】Adobe软件介绍