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

Gateway网关:路由和鉴权

网关的核心功能是:路由和过滤(鉴权)

  •  搭建网关
<dependencies><!--引入gateway 网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
</dependencies>
  • 编写启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ApiGatewayApplication {public static void main(String[] args) {SpringApplication.run(ApiGatewayApplication.class,args);}}
  • 编写配置
server:port: 10010
spring:application:name: api-gatewaycloud:# 网关配置gateway:# 路由配置:转发规则routes: #集合。# id: 唯一标识。默认是一个UUID# uri: 转发路径# predicates: 条件,用于请求网关路径的匹配规则- id: userserviceuri: http://localhost:8081/predicates:- Path=/user/**

application.yml 中的uri是写死的,就是Gateway-静态路由

Gateway-动态路由

<dependency><--添加注册中心Eureka--> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

 修改配置文件

server:port: 10010
spring:application:name: api-gatewaycloud:# 网关配置gateway:# 路由配置:转发规则routes: #集合。# id: 唯一标识。默认是一个UUID# uri: 转发路径# predicates: 条件,用于请求网关路径的匹配规则- id: user-serviceuri: lb://userservice # lb负载均衡predicates:- Path=/user/**eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka

Gateway-过滤器

GatewayFilter:局部过滤器,针对单个路由 GlobalFilter :全局过滤器,针对所有路由

全局过滤器

  • GlobalFilter 全局过滤器,不需要在配置文件中配置,系统初始化时加载,并作用在每个路由上。

  • Spring Cloud Gateway 核心的功能也是通过内置的全局过滤器来完成。

  • 自定义全局过滤器步骤:

    1. 定义类实现 GlobalFilter 和 Ordered接口

    2. 复写方法

    3. 完成逻辑处理

/*** 自定义全局过滤器*/
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {//需求 :请求参数中带有token 内容,就放行,否则提示未授权@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        获取请求对象ServerHttpRequest request = exchange.getRequest();
//        获取参数MultiValueMap<String, String> valueMap = request.getQueryParams();List<String> valList = valueMap.get("token");if(CollectionUtils.isEmpty(valList)){//异常情况,没有token参数// 获取响应对象ServerHttpResponse response = exchange.getResponse();// 返回响应码response.setStatusCode(HttpStatus.FORBIDDEN);//401// 完成响应return response.setComplete();}return chain.filter(exchange);//放行}@Overridepublic int getOrder() {return 0;}
}

http://www.xdnf.cn/news/4095.html

相关文章:

  • LeetCode 238:除自身以外数组的乘积(Java实现)
  • CRM客户关系管理系统高级版客户管理销售管理合同管理数据分析TP6.0框架源码
  • 阿里云服务器深度科普:技术架构与未来图景
  • kdump详解
  • 基于SRS实现流媒体服务器(最简单的流媒体服务器)
  • 【外围电路】0.介绍
  • react路由使用方法
  • 【ArUco boards】标定板检测
  • 《架构安全原则》解锁架构安全新密码
  • c++进阶——AVL树主要功能的模拟实现(附带旋转操作讲解)
  • ADK 第四篇 Runner 执行器
  • 把Android设备变成“国标摄像头”:GB28181移动终端实战接入指南
  • 博图V20编译报错:备不受支持,无法编译。请更改为受支持的设备。
  • C++初学者的入门指南
  • [Windows] 批量修改文件/文件夹时间戳工具 NewFileTime 7.71
  • VUE3报错 ReferenceError: Cannot access ‘openInit‘ before initialization
  • 【Qt】配置环境变量
  • educoder平台课-Python程序设计-8.文件
  • 价格识别策略思路
  • 第16章 监控和排除日志记录错误
  • 牛客 Wall Builder II 题解
  • Redis 数据类型详解(二):Hash 类型全解析
  • 数据结构-希尔排序(Python)
  • 立夏三候:蝼蝈鸣,蚯蚓出,王瓜生
  • 【AI学习】DeepSeek-R1是如何训练的?
  • Kdump 收集器及使用方式
  • archlinux安装waydroid
  • 查看并升级Docker里面Jenkins的Java17到21版本
  • 双目测量中的将视差图重投影成三维坐标图
  • 某信服EDR3.5.30.ISO安装测试(二)