网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问
API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施.。主要的功能大概下面这几点
- 性能:API高可用,负载均衡,容错机制。
- 安全:权限身份认证、脱敏,流量清洗,后端签名
- 黑名单。
- 日志:日志记录一旦涉及分布式,全链路跟踪必不可少。
- 缓存:数据缓存。监控:记录请求响应数据,api耗时分析,性能监控。
- 限流:流量控制,错峰流控,可以定义多种限流规则。
- 灰度:线上灰度部署,可以减小风险。
- 路由:动态路由规则。
这篇文章主要的内容是spring cloud gateway 对请求参数解密,返回参数加密处理以及密钥下发处理
一,搭建基本gateway项目
1.1 maven
<!--gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
1.2本地appcation.yml配置
server:
port: 8087
spring:
profiles:
active: dev
application:
name: nacos-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
1.3本地bootstrap.properties配置
因为项目是整合的nacos,所以这里网关的配置也从nacos取
#项目名
spring.application.name=nacos-gateway
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置文件尾缀
spring.cloud.nacos.config.file-extension=yml
#配置组
spring.cloud.nacos.config.group=DEV
#命名空间
#spring.cloud.nacos.config.namespace: 7a36049b-ce40-4a3a-97d0-c86858fdcc0f
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.extension-configs[0].data-id=nacos-gateway-commons.yml
spring.cloud.nacos.config.extension-configs[0].group=DEV
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=nacos-gateway-route.yml
spring.cloud.nacos.config.extension-configs[1].group=DEV
spring.cloud.nacos.config.extension-configs[1].refresh=true
这里引入nacos-gateway-route.yml配置如下
nacos-gateway-route.yml
这个是网关路由项目的配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: false
#lower-case-service-id: true
routes: #路由数组
- id: nacos-user #路由
uri: lb://nacos-user #lb 指的是负载均衡 后面是nacos的服务名
order: 1 #路由优先级 数字越小越大
predicates: #断言数组(条件判断,返回值boolean ,转发请求满足条件的)
- Path=/nacos-user/**
filters: #过滤器 数组 (在请求传递过程中,对请求做修改)
- StripPrefix=1 #在请求转发之前去掉 gateway的一层路径
- id: nacos-order #路由
uri: lb://nacos-order #lb 指的是负载均衡 后面是nacos的服务名
order: 1 #路由优先级 数字越小越大
predicates: #断言数组(条件判断,返回值boolean ,转发请求满足条件的)
- Path=/nacos-order/**
filters: #过滤器 数组 (在请求传递过程中,对请求做修改)
- StripPrefix=1 #在请求转发之前去掉 gateway的一层路径
<