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.mfbz.cn/a/334514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis-Plus基础学习

目录 第一章、快速了解mybatis-plus1.1)相关概念介绍1.2)为什么使用MyBatis-Plus1.3)学习过程中的疑问 第二章、 SpringBoot集成MyBatis-Plus2.1)idea快速创建spring boot项目2.2)setting里查看编译器2.3)添…

K8s调试积累

文章目录 一、K8S 集群服务访问失败?二、K8S 集群服务访问失败?三、K8S 集群服务暴露失败?四、外网无法访问 K8S 集群提供的服务?五、pod 状态为 ErrImagePull?六、探测存活 pod 状态为 CrashLoopBackOff?七…

阿里云ECS使用docke搭建redis服务

目录 1.确保正确安装好docker 2.安装redis镜像 3.创建容器设置端口映射 1.确保正确安装好docker 安装教程: 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm1001.2014.3001.5501 2.安装redis镜像…

94.乐理基础-记号篇-装饰音记号(二)助音的四种类型

内容参考于:三分钟音乐社 上一个内容:93.乐理基础-记号篇-装饰音记号(一)级进、跳进、经过音、辅助音-CSDN博客 当前写的助音是扩展的辅助音的内容,所以要先看上一个内容 助音的四种类型:下方的三个辅助…

网卡:初始化,frame组装,网卡处理电信号过程

ip模块中存储的是一堆数字信号,网卡内部会把数字信号转换成电信号或者光信号在网线中传输。 网卡只是一个硬件,需要驱动程序去操作他,计算机中已经把主流网卡的驱动程序(不只是网卡的,还有鼠标,键盘这些硬件…

【opencv】python实现人脸检测和识别训练

人脸识别 OpenCV 中的人脸识别通常基于哈尔特征分类器(Haar Cascade Classifier)进行。以下是 OpenCV 人脸识别的基本原理: Haar Cascade Classifier: 特征分类器:Haar 特征是一种基于矩形区域的特征,可以…

2024--Django平台开发-订单项目管理用户认证+动态菜单+权限控制(十三)

day13 订单管理项目开发 1.表结构设计 1.1 abstract类 from django.db import modelsclass ActiveBaseModel(models.Model):active models.SmallIntegerField(verbose_name"状态", default1, choices((1, "激活"), (0, "删除"),))class Meta:…

MyBatis 使用报错: Can‘t generate mapping method with primitive return type

文章目录 前言问题原因解决方案个人简介 前言 今天在新项目中使用 MyBatis 报如下错误:Cant generate mapping method with primitive return type 问题原因 发现是 Mapper 注解引入错误,错误引入 org.mapstruct.Mapper, 实际应该引入 org.apache.ibat…

CodeGeex全能的智能编程助手

大家好我是在看,记录普通人学习探索AI之路。 一、介绍 CodeGeeX,一款由清华大学知识工程实验室研发的基于大型模型的全能智能编程辅助工具,能够实现包括代码生成与补全、自动注释添加、代码翻译以及智能问答等多种功能。经过对包含前后端工…

【代码随想录08】232. 用栈实现队列 225. 用队列实现栈

目录 232. 用栈实现队列题目描述参考代码 225. 用队列实现栈题目描述参考代码 232. 用栈实现队列 题目描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类&#xff1a…

leetcode2312卖木头块

其实不难&#xff0c;主要是你得一眼看出来这个问题缩小规模然后就可以用DP来做了 using ll long long; class Solution { public:long long sellingWood(int m, int n, vector<vector<int>>& prices) {ll f[m10][n10];ll p[m10][n10];memset(p,0,sizeof p)…

JS封装本地缓存的设置,读取,移除,清空方法及使用示例

我封装了一个JS通用的缓存管理对象&#xff0c;可以提供缓存的设置&#xff0c;读取&#xff0c;移除&#xff0c;清空操作&#xff0c;使用也很方便&#xff0c;封装方法的代码在最下方。 Q: 为什么不直接用原生的缓存方法&#xff0c;要封装&#xff1f; A1:原生的缓存管理…

【随机化约束控制 解的概率_2024.01.19】

约束控制 //constraint_mode() constraint c {length inside {[1:32]};} p.c.constraint.mode(0);//0关闭&#xff0c;1打开&#xff0c;默认打开//rand_mode p.length.rand_mode(0);//随机进行关闭 p.length42;//randomiza()with{} assert(c.randmize()with{data<10;});//…

Python中HTTP代理的配置和使用

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中配置和使用HTTP代理。 一、配置HTTP代理…

Linux编写简易shell

思路&#xff1a;​ ​ ​ 所以要写一个shell&#xff0c;需要循环以下过程:​ 获取命令行解析命令行建立一个子进程&#xff08;fork&#xff09;替换子进程&#xff08;execvp&#xff09;父进程等待子进程退出&#xff08;wait&#xff09; 实现代码&#xff1a;​ #inc…

Linux———sort命令总结详解(狠狠爱住)

目录 sort命令&#xff1a; 命令参数及描述&#xff1a; 示例&#xff1a; 使用-b参数&#xff0c;忽略行首空白字符&#xff0c;按照第一列进行排序&#xff1a; -d 选项是 sort 命令中一个非常有用的选项&#xff0c;它可以按照字典顺序进行排序&#xff0c;同时忽略非字…

UI开发布局-HarmonyOS应用UI开发布局

UI页面的构建不用再像Android开发过程中在.xml文件中书写&#xff0c;可直接在页面上使用声明式UI的方式按照布局进行排列&#xff0c;构建应用的页面。 如下代码使用Row、Column构建一个页面布局&#xff0c;在页面布局中添加组件Text、Button&#xff0c;共同构成页面&#…

sd-wan跨境专线ip是固定的吗?

SD-WAN&#xff08;软件定义广域网&#xff09;是一种网络技术&#xff0c;它可以通过集中的管理和控制来提供更好的网络性能和可靠性。跨境专线是指连接不同国家之间的网络连接。 固定IP是指在网络中分配给特定设备的永久性 IP 地址&#xff0c;与动态 IP&#xff08;每次连接…

python tkinter 最简洁的计算器按钮排列

代码如下&#xff0c;只要再加上按键绑定事件函数&#xff0c;计算器既可使用了。 import tkinter as tk from tkinter.ttk import Separator,Buttonif __name__ __main__:Buttons [[%,CE,C,←],[1/x,x,√x,],[7, 8, 9, x],[4, 5, 6, -],[1, 2, 3, ],[, 0, ., ]]root tk.T…

RK3568平台 LT9211转接芯片调试笔记

一.简介 龙讯LT9211是一个高性能转换器&#xff0c;支持MIPI LVDS TTL两两之间转换。 使用此款芯片大部分为MIPI与LVDS进行互相转换。 下图为LT9211的典型应用图&#xff1a; 二.LT9211原理图 三.车载显示器和摄像头系统 四.调试LT9211输出 MIPI数据 &#xff08;1&#xf…