Gateway
Gateway基础概念
API网关指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑,可以在这里实现,诸如认证、鉴权、监控、路由转发等。
路由
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和
配置的路由匹配。
断言
断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。
过滤器
分为全局过滤器和局部过滤器。Filter可以对请求和响应进行处理。
Gateway简单使用
导入依赖
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
配置yml文件
yaml
spring:
application:
name: api-gateway
cloud:
gateway:
#路由规则
routes:
-id: order_route #路由的唯一标识 路由到order
uri: http://localhost:8044 #需要转发的地址
##断言规则 用于路由规则的匹配 路由转发的条件
predicates:
- Path=/login
filters:
- StripPrefix=1 #转发之前去掉第一层路径
Gateway路由工厂
当请求gateway的时候, 使用断言对请求进行匹配, 如果匹配成功就路由转发, 如果匹配失败就返回404。例如上面代码中的-Path就是内置路由工厂之一。还有基于Datetime类型的断言工厂、基于远程地址的断言工厂等等。
yaml
‐ After=2023‐12‐18T23:59:59.789+08:00[Asia/xian]
‐ Method=GET
......
Gateway过滤器
Gateway内置许多的过滤器工厂,通过一些过滤器工厂可以进行一些业务逻辑处理器,比如添加剔除响应头,添加去除参数等。
yaml
filters:
‐ AddRequestHeader=X‐Request‐color, red #添加请求头
‐ AddRequestParameter=color, blue # 添加请求参数
‐ PrefixPath=/mall‐order # 添加前缀 对应微服务需要配置context‐path
若使用PrefixPath,需要在mall‐order中配置
yaml
server:
servlet:
context‐path: /mall‐order
##http://localhost:8888/order/findByUserId ====》 http://localhost:8020/mallorder/order/findByUserId
Gateway跨域配置
yaml
spring:
application:
name: api-gateway
cloud:
gateway:
globalcors:
core-configuration:
'[/**]': #允许跨域访问的资源
allowedOrigins: "*" #跨域允许的来源
allowedMethods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- HEAD
来源:B站诸葛老师