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

谷粒商城第六天-实现功能的前序工作(网关的配置 跨域配置)

目录

一、为什么要做这项工作

1.1 为什么要配置网关

1.2 为什么要使用网关统一配置跨域

二、网关配置

三、统一跨域配置

四、总结


一、为什么要做这项工作

1.1 为什么要配置网关

我们知道网关的作用其实主要就是进行路由的,也就是根据前端发送到网关的请求,再由网关统一分配到对应的微服务中去的。那这里为什么需要通过网关来统一路由呢?直接由前端直接向微服务发送请求呢?这样效率不是更高吗?为什么还要走一一下网关呢?

其实原因很简单,就是如果按照直接由前端向微服务直接发请求的话,如果只有这一个微服务,那还好说,直接就写这个微服务对应的ip地址和端口号就行了,这样写死,保持这一个也不会有问题,可问题是现在是多个微服务,每个微服务对应的ip可能不一样,端口不一样,而前端又只能写上一个ip和端口,那肯定就满足不了需求了,我肯定是得向不同的微服务发送请求的,那如何解决呢?网关就能解决这个问题;既然前端只能向后端的一个微服务发送请求,那我能不能在后端搞这样的一个微服务,这个微服务的作用能够根据前端的不同请求按照一个规则定向自动的转发到后端的真正的业务微服务上面去呢?其实这个微服务就是网关微服务,网关就能干这件事,注意其实网关本身也是一个微服务,只不过它不是处理业务的微服务,而是为这些微服务做服务的。这也就是为什么要配置网关服务的必要,一句话就是:使得前端只需写一个固定的ip和端口也可以将请求发送到后端对应的微服务上去。

1.2 为什么要使用网关统一配置跨域

网关其实就是充当着中间者的这样的一个身份,就像挡在微服务前面的一道墙,除了可以路由,当然还可以对请求进行一些处理,之后再发送到对应的微服务,也就是可以干一些中间处理,那可以干哪些中间处理呢?就比如说统一进行跨域处理,其实也就是可以将那些微服务中所要必须做的,并且重复性的,就可以交由中间者网关来试一试,这样就够使得配置统一,同时又能使得代码复用。

其实这个也许并不是必须的,但我在做谷粒商城这个项目的时候,如果使用的原来的微服务中的跨域,也就是使用若依框架的后台管理的微服务自带的跨域时,发现并不行,我发现在页面进行登录时怎么也登录不上,一直报403错误,当初我还觉得是权限问题,一直以为是不是登录接口用权限框架设置了权限认证,后来看了看接口配置,发现也并没有做权限认证,然后就一直很郁闷,我还使用postman测试没问题,就说明后端是没有问题的,没有权限之类的问题的,并且获取验证码的那个接口也是没有问题的,我就猜想是不是前端的问题呢?前端对这个请求进行拦截了?奈何前端实在是不会,也就是一直放在这里了,后来就很无奈了,后端没问题,前端又不会,就只能这样一直放着了,后面无奈只能求助群里的大佬,最后将问题排除出来了。

其实也就是跨域的问题,不能使用自带的跨域,不能将处理跨域的那个对象注入到容器中去,将其进行注释,然后再网关中配置上即可,至于为什么之前的获取验证码的接口,不会出现问题,可能是因为这个是get请求,是简单请求,若依框架对其进行了处理,而登录这个post请求,若依并没有进行处理,自然使用原有的这一套就不行了,当然这个理由很牵强了,本人水平有限,待之后搞明白了,再来进行解答。总之一句话,就是使用网关统一配置跨域能简化代码,提高代码复用性,其实不是必须的,但是这里测试不这样做,登录接口就访问不了,至于到底为什么之后再来解答。

二、网关配置

将原理说清楚了,配置其实就很简单了,到目前阶段,就是只使用到网关的路由功能,要使用网关的路由功能,自然得参考网关的官方文档了,关键的如下:

 根据地址路由到特点的微服务,需要查看路由断言,中的:

在前端访问的时候,其实路径资源路径前面带了:/api-dev的,实际访问的其实最终是去掉/api-dev的:

这个/dev-api是在前端配置的,代表当前前端是开发环境,访问的时候会自动去掉再去进行访问。

所以现在前端发的请求到底啥样子现在清楚了,现在要解决的问题是如何正确的对应的后端微服务,根据前端发的就能正确路由到后端,其实路由到后端关键就是将url中的ip和端口自动动态的微服务真实的ip和端口就行了,当然完成这一步的前提是将业务微服务和网关微服务都注册到注册中心去,这是前提,完成注册就三步,这里就不赘述了,详情参考我的微服务组件那一篇博文中的nacos注册中心。关键在于网关里面的配置,既然要动态的到后端的微服务,那么肯定得让网关感受到后端的关键信息能唯一标识后端的微服务才能正确的路由到指定的微服务,那这个“关键信息”是什么呢?其实在后端一个微服务,由逆向代码自动生成的代码,其接口的路径规范就是一个微服务下的所有控制器接口的路径都是以模块名开头的,模块名我们又是在哪里指定的呢?

在使用若依的代码生成器配置那里指定的。

 这里是什么,控制器接口就以什么开头。既然控制器都以这个开头了,那么这个就可以作为网关识别的“关键信息”,因此在网关配置中,配置以模块名开头就转发到对应的微服务,而微服务通过服务名指定,这个是由nacos注册中心去找到对应的服务的,然后使用下lb负载均衡就行了。

如下图的配置:

三、统一跨域配置

这个统一跨域配置就很简单了,直接在网关里面配好即可。

spring:cloud:nacos:server-addr: localhost:8848gateway:globalcors:cors-configurations:'[/**]': # 匹配所有请求allowedOrigins: "*" #跨域处理 允许所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETEroutes:- id: product_path_routeuri: lb://gulimall-productpredicates:- Path=/product/**- id: thirdparty_path_routeuri: lb://thirdpartypredicates:- Path=/thirdparty/**- id: admin_path_routeuri: lb://gulimall-adminpredicates:- Path=/**application:name: gulimall-geteway
server:port: 88

当然还要将后台管理服务中自带的跨域给注释掉:

security里面也注释掉:
 这又是一种方式了,之前在我的博客里面还介绍过单体项目配置跨域的两种方式,所以到目前为止就有三种方式了。

四、总结

其实就干了两件事:配置好网关的路由使得前端一个固定的ip和端口就能到底指定的微服务,以及使用网关进行统一配置

相关文章:

谷粒商城第六天-实现功能的前序工作(网关的配置 跨域配置)

目录 一、为什么要做这项工作 1.1 为什么要配置网关 1.2 为什么要使用网关统一配置跨域 二、网关配置 三、统一跨域配置 四、总结 一、为什么要做这项工作 1.1 为什么要配置网关 我们知道网关的作用其实主要就是进行路由的,也就是根据前端发送到网关的请求&…...

为什么说国内数字孪生平台gis架构采用Cesium是不错的选择?

Gis作为数字孪生平台开发中重要的一环对数字孪生平台是否好用是一个重要的判定方式,国内数字孪生软件在融合GIS系统方面采取了多种方式,例如Unity或Unreal Engine等游戏引擎,以增强数字孪生的空间感知和空间分析能力,提供更全面、…...

前端面试的性能优化部分(1)每篇10题

1. 懒加载的概念 懒加载(Lazy Loading)是一种优化技术,它用于延迟加载页面资源,只在需要时才加载特定的内容,而不是在页面初始加载时一次性加载所有资源。懒加载的目的是提高页面加载速度和性能,尤其对于单…...

GitLab备份升级

数据备份(默认的备份目录在/var/opt/gitlab/backups/下,生成一个以时间节点命名的tar包。) gitlab-rake gitlab:backup:create新建repo源,升级新版本的gitlab vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.…...

Matlab实现遗传算法仿真(附上40个仿真源码)

遗传算法(Genetic Algorithm,GA)是一种基于生物进化理论的优化算法,通过模拟自然界中的遗传过程,来寻找最优解。 在遗传算法中,每个解被称为个体,每个个体由一组基因表示,每个基因是…...

git使用(由浅到深)

目录流程图 1. 分布式版本控制与集中式版本控制 1.1 集中式版本控制 集中式版本控制系统有:CVS和SVN它们的主要特点是单一的集中管理的服务器,保存所有文件的修订版本;协同开发人员通过客户端连接到这台服务器,取出最新的文件或者提交更新…...

NAT协议(网络地址转换协议)详解

NAT协议(网络地址转换协议)详解 为什么需要NATNAT的实现方式静态NAT动态NATNAPT NAT技术的优缺点优点缺点 NAT协议是将IP数据报头中的IP地址转换为另外一个IP地址的过程,主要用于实现私有网络访问公有网络的功能。这种通过使用少量的IP地址代…...

pytorch(续周报(1))

文章目录 2.1 张量2.1.1 简介2.1.2 创建tensor2.1.3 张量的操作2.1.4 广播机制 2.2 自动求导Autograd简介2.2.1 梯度 2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 为什么需要CUDA2.3.3 常见的并行的方法:网络结构分布到不同的设备中(Network partitioning)同一层…...

el-table 树形结构数据 设置某一层,新增按钮不展示

<template><div><el-table:data"tableData":row-class-name"rowClassName":tree-props"{ children: children, hasChildren: hasChildren }"><!-- 表格列定义 --><!-- ... --><el-table-column label"操作…...

【Unity2D】粒子特效

为什么要使用粒子特效 Unity 的粒子系统是一种非常强大的工具&#xff0c;可以用来创建各种各样的游戏特效&#xff0c;如火焰、烟雾、水流、爆炸等等。使用粒子特效可以使一些游戏动画更加真实或者使游戏效果更加丰富。 粒子特效的使用 在Hierarchy界面右键添加Effects->…...

第九十六回 网络综合示例:获取天气信息

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了dio库中转换器相关的内容&#xff0c;本章回中将介绍网络综合示例&#xff1a;获取天气信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面章回中介绍了网络操作相关的内容&#xff0c;本章…...

Shell中获取昨天和多天前日期

1、获取今天日期 $ date -d now %Y-%m-%d 或者 $ date %F2、获取明天日期 $ date -d next-day %Y-%m-%d $ date -d tomorrow %Y-%m-%d3、获取昨天日期 $ date -d yesterday %Y-%m-%d 或者 $ date -d last-day %Y-%m-%d 或者 $ date -d "1 days ago" %Y-%m-%d …...

golang静态编译及编译失败排查步骤

文章目录 一、背景前提 二、静态编译概述1、执行静态编译设置CGO_ENABLED方式指定link方式 2、编译报错分析&#xff08;1&#xff09;确认系统上有没有安装libopus&#xff08;2&#xff09;设置LD_LIBRARY_PATH 三、详细排查过程1、下载bpf排查工具bcc, bcc-tools,python-bcc…...

2023年7月第4周大模型荟萃

2023年7月第4周大模型荟萃 2023.7.31版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、Cerebras推出全球最强AI超算 AI芯片初创公司Cerebras Systems和总部位于阿联酋的技术控股集团G42于7月20日宣布&#xff0c;携手打造一个由互联的超…...

Meta分析的选题与文献计量分析CiteSpace应用丨R语言Meta分析【数据清洗、精美作图、回归分析、诊断分析、不确定性及贝叶斯应用】

目录 ​专题一、Meta分析的选题与文献计量分析CiteSpace应用 专题二、Meta分析与R语言数据清洗及相关应用 专题三、R语言Meta分析与精美作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析与进阶 专题六、R语言Meta分析的不确定性及贝叶斯应用 专题七、深度拓展…...

vscode eslint配置

1. 全局安装 eslint npm install -g eslint 2. control shift p 输入 settings 打开设置进行配置 3. 添加配置 {"workbench.colorTheme": "One Dark Pro","eslint.debug": true,"eslint.execArgv": null,"eslint.alwaysShow…...

C++ 对象模型 C++ Object Model

C 对象模型 C Object Model 文章目录 C 对象模型 C Object ModelC语言的数据及函数C的类C对象模型 C语言的数据及函数 C语言中&#xff0c;数据和函数是分开声明的。 数据 typedef struct point2d {float x;float y; } Point2d;函数 打印Point2d的数值 void Point2d_print…...

leetcode做题笔记47

给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思路一&#xff1a;回溯 int* Source NULL; int Source_Size 0;int** Result NULL; int* Retcolsizes NULL; int Result_Index 0;int* Path NULL; int Path_Index 0;bool* Used …...

Linux Day04

目录 一、文件压缩与解压命令 1.1 tar cvf 文件名 ---打包命令生成.tar 1.2 tar xvf 文件名 ----解开包 生成文件 1.3 gzip .tar 压缩 生成.tar.gz压缩包 1.4 gzip -d .tar.gz 解压成包 1.5 直接把压缩包解压成文件 tar zxf .tar.gz 二、Linux 系统上 C 程序的…...

上海亚商投顾:沪指冲高回落 两市成交重回万亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日冲高回落&#xff0c;盘初一度集体涨超1%&#xff0c;随后涨幅明显回落&#xff0c;上证50午后一度翻…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...