2024-01-17(SpringCloud)

1.使用openFeign的itemClient接口去做远程调用其他微服务中的接口。但我们直接使用了itemClient接口,而不是该接口的实现类,说明我们是使用该接口的代理对象帮我们做远程调用的。这个代理对象是invocationHandler来生成的。

2.openFeign底层发起远程调用其他微服务的接口时,会一个一个的建立http连接,增加时间成本,因此有连接池技术来降低连接成本,用连接池进行优化性能(OKHttp等连接池)。

3.服务拆分成微服务之后,ip端口很多且有变化的风险,请求方不知道请求哪个;并且在需要密钥token(用户的身份校验)的情况下,不可能把密钥分发给每个微服务都来对用户身份进行校验。所以出现了网关来解决这些问题。

4.网关:就是网络的关口,负责请求的转发、路由、身份校验。

5.SpringCloud为我们封装好了实现网关功能的组件,不用我们实现网关的功能(身份校验,服务拉取,路由转发,负载均衡等),便于我们直接使用即可。SpringCloud中网关的实现包括两种:SpringCloud Gateway(用这个),Netfilx Zuul。

6.网关的请求转发:微服务向注册中心注册自己的信息,网关服务从注册中心拉取所有微服务的信息,当请求来临时,根据拉取的信息去分发请求到指定的微服务。

7.在application.yml文件中配置路由规则(网关端口,网关name,nacos地址,路由id,路由uri,路由匹配规则等信息)

8.路由属性:

网关路由对应的Java类型是RouteDefinition,其中常见的属性:

id:路由唯一标识

uri:路由目标地址

predicates:路由断言,判断请求是否符合当前路由

filters:路由过滤器,对请求或响应做特殊处理。

9.路由断言(predicates,开发人员可以根据它来匹配请求,如果请求和断言匹配才进行路由)分类:

10.路由过滤器(对访问网关的前端请求做相应的加工处理):

11. 网关的登录校验:

如何做:配置网关过滤器,实现登录校验,网关传递用户,将用户身份认证得到的token放置到路由转发请求的请求头中(其他微服务提供服务时也需要验证用户身份)

配置网关过滤器(一般使用GlobalFilter过滤器来实现):

 12.通过网关实现登录校验:在网关中基于过滤器实现登录校验功能。

红框处进行token的校验,来验证用户身份信息。

13.网关将在GlobalFilter网关过滤器中拿到的用户信息传递给后续的微服务

在网关中利用Jwt工具类解析请求头中的token,然后将解析出来的token传递给下游的微服务,进行后续的业务处理。(上述过程交给公共微服务模块中的SpringMVC的拦截器来获取上游网关传来的解析token信息)

14.在微服务之间传递用户信息(微服务项目中的很多业务需要多个微服务共同合作完成,而这个过程中也需要传递登录用户信息)。

例如:

上述所说的在微服务之间传递用户信息可以利用openFeign来实现:openFeign中提供了一个拦截器接口,所有由openFeign发起的请求都会先调用拦截器处理请求。

这个接口为:

public interface RequestInterceptor {void apply(RequestTemplate template);}

其中的RequestTemplatel类中提供了一些方法可以让我们修改请求头。

15.上述在微服务场景下,利用网关实现登录校验的整体流程总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416111.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决js计算精度问题

问题 浮点数,常用的办法是四舍五入保留2位小数来解决。但是在向上、向下保留小数的时候,比如:0.10.20.30000000000000004,向上保留2位小数就变成了0.31。 大整数,在超出Number的最大安全整数时,计算也会存…

Tide Quencher 8WS-Amine,TQ8WS-胺,可用于特定荧光信号的检测

您好,欢迎来到新研之家 文章关键词:Tide Quencher 8WS Amine,TQ8WS amine,Tide Quencher 8WS NH2 ,TQ8WS NH2,Tide Quencher 8WS 胺,TQ8WS 胺 一、基本信息 产品简介:The fluores…

MySQL的基本查询(附案例)

目录 前言 Create(创建) 单行数据全列插入: 多行数据指定列插入: 插入否则更新: 替换: Retrieve(读取) SELECT 列: 全列查询: 指定列查询&#xff1a…

DMA技术在STM32中优化UART、SPI和I2C通信性能的研究与实现

DMA(Direct Memory Access,直接存储器访问)技术可以在STM32微控制器上优化UART、SPI和I2C等通信性能。DMA可以实现数据的高速传输,减轻CPU的负担,提高系统性能。在本篇文章中,我将探讨DMA技术在STM32中优化…

【数据开发】BI数据报表之数据可测试性设计与分析

文章目录 1、什么是BI&数据报表2、什么是可测试性3、数据测试与方法3.1 数据准确性与对比(重要)3.2 数据安全性 1、什么是BI&数据报表 数据报表是一种数据可视化工具 用于将数据以图表、表格和其他可视化形式呈现出来,以便用户可以…

学习响应式编程中遇到的奇奇怪怪的问题

spring项目无法启动 Description: Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context. Action: Check your application’s dependencies for a supported react…

Linux的网络文件共享服务之FTP服务

一.存储类型 1.1 存储类型分为三种 直连式存储:Direct-Attached Storage,简称DAS 存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理) 网络附加存储:Net…

【Python_PySide6学习笔记(三十一)】基于PySide6实现自定义串口设备连接界面类:可实现串口连接断开、定时发送等功能

基于PySide6实现自定义串口设备连接界面类:可实现串口连接关闭、定时发送等功能 基于PySide6实现自定义串口设备连接界面类:可实现串口连接关闭、定时发送等功能前言一、界面布局二、串口相关功能实现三、完整代码四、调用方法五、实现效果基于PySide6实现自定义串口设备连接…

十、Three场景实现多个物体的合并

Three场景实现多个物体的合并 目的 产品需求是让物体的光柱墙包含一个多边形的区域,二而我的多边形只能使用原型,方向,多边形。那么再研究的时候就需要将这些多边形合并成为一个形状,那么就行实现了。 原先的图形 如上图,是两个mesh组成的。首先寻找mesh合并的方法。 第…

算法练习-长度最小的子数组(思路+流程图+代码)

难度参考 难度:简单 分类:数组 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。 题目 给定一个含有个正整数的数组和一个正整数s,找…

redisson的延时队列机制简述

概述 业务中经常会遇到一些延迟执行的需求;通常想到的都是rabbitmq或者rocketmq的延迟消息; 但是系统中不一定集成了mq,但为了控制分布式下的并发,一般redis都是有集成的; redis的key过期监听那个时间不准确&#xff…

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter 0. 背景1. 安装 docker-ce2. 安装 NVIDIA Container Toolkit3. 使用 nvidia-ctk 命令配置容器运行4. 通过 docker 运行 nvidia-smi5. 运行 gpu-jupyter6. 访问 gpu-jupyter7. 测试 gpu-jupyter 是否可以访问 cuda 0. 背景 今天突…