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

十一、统一网关GateWay(搭建网关、过滤器、跨越解决)

目录

一、网关技术的实现

在SpringCloud中网关的实现包括两种:

作用:

二、搭建网关服务

1、新建模块,并添加依赖

2、新建Gateway包,并编写启动类

3、编写yml文件

4、启动服务,并在网页内测试

5、步骤

三、路由断言工厂

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

四、路由过滤器

配置路由过滤器:

1、修改yml文件

2、重启gateway服务,并在userController中添加请求头参数

 3、重启user服务,并且在浏览器中进行测试

配置所有路由的过滤器:

1、在yml文件中添加默认路由过滤器

2、重启网关,并测试

五、全局过滤器

1、新增拦截器类

2、重启服务,并发送请求

3、添加过滤参数并发送请求

六、过滤器执行顺序

七、跨域问题的解决


一、网关技术的实现

在SpringCloud中网关的实现包括两种:

  • gateway
  • zuul

Zuul是基于Servlet的实现,属于阻塞式编程。

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

作用:

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

二、搭建网关服务

1、新建模块,并添加依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

2、新建Gateway包,并编写启动类

3、编写yml文件

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service #路由标识(唯一)uri: lb://userservice #目标路由的地址predicates: #路由断言- Path=/user/** #判断路径- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**

4、启动服务,并在网页内测试

5、步骤

三、路由断言工厂

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

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

具体使用方法可以在spring官网查看

当路由规则不符合时,会出现404的错误!

四、路由过滤器

路由过滤器工厂同样有30多个,这里是具体实现方法。

配置路由过滤器:

1、修改yml文件

          filters:- AddRequestHeader=Truth,Itcast is freaking aowsome!
2、重启gateway服务,并在userController中添加请求头参数

 3、重启user服务,并且在浏览器中进行测试

说明请求头添加成功了

这只是配置单个路由的过滤器,若要添加所有路由过滤器,进行以下步骤

配置所有路由的过滤器:

1、在yml文件中添加默认路由过滤器

2、重启网关,并测试

发现请求头添加成功,也就是过滤器添加成功

五、全局过滤器

1、新增拦截器类

@Order(-1) //参数是指过滤器的优先级,值越低,优先级越高
@Component
public class AuthorizeFileter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        1.获取请求参数ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> params = request.getQueryParams();
//        2.获取参数中的authorization参数String authorization = params.getFirst("authorization");
//        3.判断参数值是否等于adminif ("admin".equals(authorization)){
//        4.是则放行return chain.filter(exchange);}else {
//        5.否则拦截
//        5.1设置状态码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
//        5.2拦截请求return exchange.getResponse().setComplete();}}
}

2、重启服务,并发送请求

3、添加过滤参数并发送请求

六、过滤器执行顺序

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

七、跨域问题的解决

在gateway的yml文件中加上,网站记得改

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

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

相关文章:

  • C语言--每日五道选择题--Day20
  • Fourier分析导论——第6章——R^d 上的Fourier变换(E.M. Stein R. Shakarchi)
  • 音视频技术在手机上的应用与挑战
  • 三十分钟学会SCALA
  • leetcode做题笔记242. 有效的字母异位词
  • 沸点 | Ultipa 图数据库金融应用场景优秀案例首批入选,金融街论坛年会发布
  • GaussDB SQL基础语法示例-GOTO语句
  • ClickHouse 物化视图
  • 原理Redis-ZipList
  • 小迪安全笔记——Web架构篇语言中间件数据库系统源码获取
  • Linux从 全栈开发 centOS 7 到 运维
  • Harmony Ble 蓝牙App (一)扫描
  • 录制第一个jmeter性能测试脚本2(http协议)——webtour
  • 时间序列与 Statsmodels:预测所需的基本概念(1)
  • 计算机网络(持续更新…)
  • BetterDisplay Pro for Mac(显示器校准软件)
  • Node.js之TCP(net)
  • 何时使用Elasticsearch而不是MySql?
  • nodejs微信小程序 +python+PHP+图书销售管理系统的设计与实现-网上书店-图书商城-计算机毕业设计
  • 云原生周刊:Istio 1.20.0 发布 | 2023.11.20
  • Ajax基础(应用场景|jquery实现Ajax|注意事项)
  • 【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析
  • Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis
  • 基于单片机K型热电偶温度采集报警系统
  • 利用OpenCV做个熊猫表情包 二
  • 华纳云服务器怎么清理cdn缓存?
  • python functools.wraps保留被装饰函数属性
  • 【多线程 - 11、死锁】
  • flask实现session开发
  • paddle dataset