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

微服务-统一网关Gateway

网关的作用

  • 对用户请求做身份认证、权限校验
  • 将用户请求路由到微服务,并实现负载均衡
  • 对用户请求做限流

在这里插入图片描述

搭建网关服务

  1. 创建新module,命名为Gateway,引入依赖(1.SpringCloudGateway依赖;2.Eureka客户端依赖或者nacos的服务发现依赖)。在本案例中使用的是Eureka。
<!--网关依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
<!--Eureka客户端依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
</dependency>
  1. 配置Application.yml的网关服务
  • 路由id:路由的唯一标示
  • 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  • 路由断言(predicates):判断路由的规则,
  • 路由过滤器(filters):对请求或响应做处理
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:gateway:routes: # 网关路由配置- id: user-service # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-service # 路由id,自定义,只要唯一即可uri: lb://orderservicepredicates:- Path=/order/**
#    nacos:
#      server-addr: localhost:8848 # nacos地址
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/ # 注册到eureka
  1. 启动测试
    目录结构
    在这里插入图片描述
    服务
    在这里插入图片描述
    浏览器的测试结果,可见当给网关服务发送请求时,对应于orderservice和userservice的请求被成功转发到对应路由
    在这里插入图片描述
    在这里插入图片描述
  2. 总结搭建网关服务的流程
    在这里插入图片描述

路由断言工厂

predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地

在这里插入图片描述

路由过滤器GatewayFilter

spring官方文档
在这里插入图片描述在这里插入图片描述用@RequestHeader来获取
在这里插入图片描述
给所有的微服务都加一个请求头,用默认过滤器

spring:  application:    name: gateway # 服务名称  cloud:    nacos:      server-addr: localhost:8848 # nacos地址    gateway:      routes: # 网关路由配置        - id: user-service           uri: lb://userservice            predicates:             - Path=/user/**         - id: order-service          uri: lb://orderservice          predicates:            - Path=/order/**      default-filters: # 默认过滤器,会对所有的路由请求都生效        - AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头

全局过滤器

在这里插入图片描述

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:
参数中是否有authorization,
authorization参数值是否为admin
如果同时满足则放行,否则拦截

@Order(-1) //顺序,越小越靠前
@Component //定义组件
public class AuthorizeFilter implements GlobalFilter{    @Override    public 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();    }
}

在这里插入图片描述

路由过滤器、defaultFilter、全局过滤器的执行顺序?
1、order值越小,优先级越高
2、当order值一样时,顺序是defaultFilter最先,然后是局部的路由过滤器,最后是全局过滤器

cors跨域配置

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/211854.html

相关文章:

  • 【音视频|wav】wav音频文件格式详解
  • 网络工程综合试题(二)
  • Android JNI/NDK 入门从一到二
  • 吃瓜教程3|决策树
  • springboot动态数据源【非伪数据源】
  • 如何改善设备综合效率(OEE)并提高工厂的生产力
  • 一文接入Android阿里Sophix热更新
  • 【高阶数据结构】并查集和图
  • Git 提交时提示 GPG 签名错误
  • vite+vue3实现 tomcat 的本地部署
  • docker+playwright
  • php框架路由实现
  • 在CentOS 7中手工打造和运行xml文件配置的Servlet,然后使用curl、浏览器、telnet等三种工具各自测试
  • 单例模式.
  • 2023年MathorCup高校数学建模挑战赛大数据挑战赛赛题浅析
  • c++小惊喜——stringstream
  • ubuntu 18.04 编译安装flexpart 10.4(2023年) —— 筑梦之路
  • 深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models
  • HashMap的遍历方式 -- 好几次差点记不起来总结了一下
  • PostgreSQL 两表关联更新sql
  • R2R 的一些小tip
  • UML中类之间的六种主要关系
  • 机器学习-朴素贝叶斯之多项式模型
  • 下载的nginx证书转换成tomcat证书格式
  • 计算机毕业设计选题推荐-社区志愿者服务微信小程序/安卓APP-项目实战
  • ES6中数值扩展
  • sql-50练习题11-15
  • 【多线程面试题十九】、 公平锁与非公平锁是怎么实现的?
  • 3.4每日一题(变量可分离方程通解)
  • LabVIEW背景颜色设为和其他程序或图像中一样