web服务和前端交互相关的上中游业务技术知识点梳理

文章目录

  • 前言
  • 一、业务API网关鉴权
      • Cookie + Session 实现 API 鉴权
      • API Key + API Secret
      • token 机制实现 API 鉴权
  • 二、Tomcat、Servlet、SpringMVC
  • 总结


前言

可能之前在学校里面做的很多东西是纯后端的,不会涉及到太多和前端交互的细节,很多新手对前后端交互以及上中游业务链路的整体流程不够清晰,做一些javaWeb项目可以让我们有机会对其进行更深入的研究,最近总结了一下相关技术知识点并结合自己的实践经验来和大家分享。


一、业务API网关鉴权

网关(GateWay)是什么?有哪些功能?
客户端请求服务端服务的统一入口,功能包括服务路由转发、服务注册、负载均衡、弹力设计、安全认证、流控熔断降级、日志监控等。

在这里插入图片描述

网关一般可以包括流量网关和业务网关,当然我们也可以把它们模糊放到一起,流量网关主要负责垂直流量控制及安全防护,提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书卸载、Web防火墙、全局流量监控、日志记录、黑白名单控制、接入请求到业务系统的Nginx负载均衡等,如kong。
业务网关负责流量分发调度及服务治理,与业务紧耦合,提供单个业务域级别的策略,如服务治理、身份认证,权限控制、日志输出、数据加密、熔断限流等,如K8s的Istio。
在这里插入图片描述
在这里插入图片描述
几种网关的对比
在这里插入图片描述

主要聊下业务网关,比如GPT对话的页面,请求到Web的地址后,用户操作的时候会去走Http请求网关的Api接口,这个时候网关会有对应的鉴权机制。那么鉴权的目的是什么?----数据在互联网中传输是不安全的,所有处于开放环境的数据传输都可以被截取、篡改,因此数据传输必须签名加密。

签名核心解决的以下问题:
请求是否合法:请求数据的是否是我规定的那部分人
请求是否被篡改:请求的数据是否是原始数据,是否被篡改过
防止重复请求(防重放):是否重复请求

记得自己最开始不熟的时候请求网关API经常报203错误(用户信息为空),于是抽出一段时间来研究学习这部分内容,发现目前项目接触到的鉴权机制大概分成下面3种,另外还有基于proxy代理访问其他服务的,都需要考虑默认是否鉴权,以及对应的具体鉴权方式(有状态/无状态,长期/临时),可以参考这篇博文https://blog.csdn.net/DanielJackZ/article/details/122520971

Cookie + Session 实现 API 鉴权

如果是自己内部的控制台上,可能会伴随企业内部的SSO单点登录校验功能。
复习一下Cookie和Session,估计很多后端er最早接触到它还是在电商秒杀系统。
如果一个单体服务,里面设计一个登录模块,可以用Cookie和Session这种方式。Cookie的画user_token传输可以是基于线程ThreadLocal传输的。
Cookie Session Token区别与联系需要清楚 https://www.zhihu.com/question/353373715

如果cookie里面存储临时会话token的话可能过期,于是额外还有RefreshToken这种续命机制。
参考https://blog.csdn.net/NSPOKS/article/details/101771817/

如果登录以后,打开一个新的无痕页面,然后输入访问web页面地址,可能弹出登录页面,让你扫码或者用户密码或者短信验证码SSO登录,可以看到F12查看登录成功以后,传输过去的cookie信息。
在这里插入图片描述

另外有空还可以研究一下cookie、session、token的具体内容和格式。

跨域问题&网络安全
同源/同域策略:域名相同,端口相同,协议相同
跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,保证安全性防止攻击,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
前后端解决跨域问题 CORS SpringCloud Gateway注解 代理服务器
https://zhuanlan.zhihu.com/p/664531765
https://blog.csdn.net/Lee_92/article/details/129230088
https://www.shence123.com/s/11618.html
https://zhuanlan.zhihu.com/p/414130685
https://zhuanlan.zhihu.com/p/132534931?utm_id=0
网络安全风控 XSS CSRF 重放攻击等
https://blog.csdn.net/LawssssCat/article/details/104731979?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-104731979-blog-106137473.235%5Ev40%5Epc_relevant_anti_vip&spm=1001.2101.3001.4242.1&utm_relevant_index=3

Cookie + Session 是最传统的 API 鉴权方式,比如很多网站的登录模块就是靠这种方式实现用户会话管理。在服务端会生成一个 session 来保持会话状态,各个 session 是通过唯一的 session_id 来标识,以次来判断请求是那个客户端发起的,session_id 存储在客户端的 cookie 中,后续所有的请求都会把 cookie 传到服务端,服务端解析 cookie 后找到对应的 session 进行判断。

特点:
(1)为了使后台应用识别是那个用户发出的请求,需要在服务端存储一份用户登录信息(session),这份信息也会在相应前端请求时返回给客户端,客户端将其保存在 cookie 中
(2)客户端下次请求时发送给服务端,服务端根据这个标识来识别具体时那个用户
(3)cookie 内仅包含一个 session 标识符,其他用户信息还是存储在服务端中

缺点:
(1)性能相对较低:每一个用户经过服务端认证后服务端都要做一次记录,以方便下次请求的鉴别,通常 session 都是保存在内存中,而随着用户认证增多,服务端开销会越来越大
(2)在一个无状态协议里注入状态,与 REST 风格不匹配
(3)因为改方案是基于 cookie 来进行识别,cookie 如果被获取用户很容易受到 CSRF 攻击
(4)很难跨平台,在移动端应用 session 和 cookie 很难行通,你无法与移动终端共享服务端创建的 session 和 cookie

API Key + API Secret

这种格式在postMan里面请求如下,这里有个小tips:可以通过PostMan的enviorment变量功能设置不同的环境(线下dev(类似http://127.0.0.1:9999 or localhost:8080等)、测试boe、预发staging、生产prod)等的地址,以及全局变量。
在这里插入图片描述
这种方式是指当请求的资源、API Key 和 API Secret 匹配时,用户才可以访问对应的资源,一般还会加上时间戳等方式来进行请求的时效控制。

实现方法:服务器生成一对 Key/Secret 保存,并下发给客户端,Key 和 Secret 均是按照某种规则随你生成,互相无法推算。在客户端发起请求时,需要将包含 API Key 在内的所有请求参数排序(一般都是使用字典序),然后跟 API Secret(相当于加盐)一起做 hash 生成一个 sign 参数,服务器只需要按照约定的规则做一次签名计算,然后和请求的签名做比较,如果一致则验证通过,如果验证不通过则拒绝。

这种模式并不是RBAC(角色权限控制),而是 ACL(Access Control List: 访问控制列表) 访问控制。这种方式实现简单,占用的计算资源和网络资源都较少,安全性也可以。但是一般来说每一个 api 都需要分配一对 Key 和 Secret,因此当 Key 和 Secret 比较多的时候,服务器会有一定的存储成本,而且服务端只能通过 API Key 来区别调用者,API Secret 一旦泄露将造成较大的安全风险。这种模式一般适用于 Web API。

token 机制实现 API 鉴权

这个可以在一些接入第三方平台的临时授权,他们没有通过Cookie+Session的登录功能,我们就可以在服务端设置对应的固定token,线下、测试、预发、生产都有不同的token值,并且添加黑白名单的路径列表,需要访问的时候,需要把自己开发的接口地址加入到权限地址列表里面,然后请求头带对应环境的token才能正确访问。
当然网关API肯定不能搞token过期了,经常过期还玩个锤子,于是可以服务端写死,约定好请求时候带上正确的token就行。
之前老的业务请求方式可能基于AK/SK的方式,后来网关暴露的API都陆续都改成了token方式,也是为了减轻服务器的存储负担。
如果没加token,或者token和环境不匹配,或者没有把路径添加到访问权限列表,或者路径写错不存在的话,都会报203,排查时候需要注意这几个点。
在这里插入图片描述

token 令牌机制是用来代替 session 的鉴权方式,token 机制是服务端根据特定的规则生成的一串加密字符串下发给客户端,客户端请求服务端所有资源时都会携带上这个 Token(一般设置在 header 中)。服务端来校验这个 token 的合法性,这种方式具有无状态、适合分布式、扩展性好、性能和安全性好更好等优点。
在这里插入图片描述
常见 Token 实现有以下几种:
自定义实现 token:应用开发者根据 token 机制原理自行实现
JWT:即 json web token,是一种主流的 token 规范
Oauth:Oauth 虽然时授权规范,但其中也用到 TOken
HTTP Basic Authentication 认证机制
Web API 是基于 HTTP 协议,而 HTTP 协议本身就带有认证机制

最后整个流程可能是下面这样,在Http请求发送Post的Object类型对象,经过Thrift序列化JSONString,在主服务的里面反序列化praseArray/Object,如果参数比较复杂并且频繁变动,就用Object接收,然后直接转String传过去,然后那边转Array或者Object,然后放到parambody转去http请求一些外部地址。
注意String类型转JSONString会报错,提前加instanceof判断一下,并且注意不恰当解析导致的"\content"的转义问题。
在这里插入图片描述

额外的问题:为什么公司一般HTTP接口都用POST请求,又为什么不用RestFul?
https://zhuanlan.zhihu.com/p/596637025
https://www.zhihu.com/question/336797348/answer/2189330351
https://www.zhihu.com/question/336797348/answer/2866008249?utm_id=0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
额外:301 302 重定向 长链接和短链接转换的底层设计 学习一下
接口调试工具Apipost=Postman + Swagger + Mock + JMeter

二、Tomcat、Servlet、SpringMVC

如果是C++选手可能搞过Tyni-WebServer的Web服务器开发这个项目。
首先需要搞清楚它们是什么关系,个人理解:Servlet是web服务的一套协议接口,SpringMVC实现了它,是对其高级封装,Tomcat作为Web容器兼JSP/Servlet容器,可以为它们提供必要的运行环境。并且SpringBoot内置了Tomcat,可以本机80端口直接启动访问。
下面是一些比较直观的图,就不赘述了:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有个经典问题就是—Tomcat的类加载器隔离机制,及其类加载器的结构,通过重写ClassLoader的findClass和LoadClass方法可以实现自定义类加载。相关了解还有Panduora和AliTomcat等。
https://blog.csdn.net/zyh661120/article/details/119543402
https://blog.csdn.net/cristianoxm/article/details/121268913
https://blog.csdn.net/chenwiehuang/article/details/123957955
https://blog.csdn.net/weixin_45428910/article/details/129313723
https://blog.csdn.net/csucsgoat/article/details/121529374
在这里插入图片描述
在这里插入图片描述
上面的参考地址 https://www.cnblogs.com/wa1l-E/p/17072581.html
在这里插入图片描述
关于tomcat 类加载结构,注意系统架构和类继承架构不是一回事。
在这里插入图片描述
在这里插入图片描述
https://blog.csdn.net/weixin_42146366/article/details/97749031
https://www.cnblogs.com/wa1l-E/p/17072581.html
https://blog.csdn.net/qq_38526573/article/details/125425626

然后是SpringMVC,经典架构图如下,其前端控制器本质就是一个Servlet,并且SpringMVC简化了很多流程,我们项目里面更多关注Controller层也就是Handler的设计。
在这里插入图片描述


总结

这篇文章我们梳理了web服务和前端交互相关的上中游业务技术知识点,涉及到网关鉴权、Cookie、Session、Token、AK-SK、跨域问题、网络安全、Tomcat、Servlet、SpringMVC等,总结的过程也是一种系统化的复习,可能自己以后工作时候遇到不清楚的地方,能够结合自己以前的经历回想到自己曾经整理过的内容。

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

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

相关文章

MR image smoothing or filtering 既 FWHM与sigma之间的换算关系 fslmaths -s参数

这里写目录标题 FWHM核高斯核中的sigma是有一个换算公式:结果 大量的文献中都使用FWHM 作为单位,描述对MR等数据的平滑(smoothing)或者滤波(filtering)过程。FWHM 通常是指full width at half maximum的缩写…

你是在思考,还是找认同?

这两天,有一篇批判腾讯的文章,开始在互联网圈子里流传开来。 我身边也有人在传播。好奇瞅了下,观察到一个很有意思的地方: 赞同这篇文章的,往往也都是平时那些认为,腾讯面对阿里和字节的冲击岌岌可危的&…

配置dns主从服务器,实现正反向解析

一、安装bind服务 yum install bind -y二、修改主配置文件/etc/named.conf 三、配置数据配置文件/var/named/baidu 四、重启服务,进行测试 systemctl restart named

南昌市青山湖、滕王阁、洛阳路隧道FM调频广播集群通信调度系统应用案例

一、用户需求 青山湖隧道,是南昌市一条东西走向的城市主干道,隧道为双向6车道,长1070米,其中湖底暗埋段为550米,净高5.45米,两孔每孔净宽12.4米。 滕王阁隧道是南昌市沿江北大道与沿江中大道连通工程&#…

【代码随想录-数组】移除元素

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

案例分享 | 助力数字化转型:嘉为科技项目管理平台上线

嘉为科技项目管理平台(一期)基于易趋(EasyTrack)进行实施,通过近一年的开发及试运行,现已成功交付上线、推广使用,取得了良好的应用效果。 1.关于广州嘉为科技有限公司(以下简称嘉为…

JRT执行SQL脚本

我们可能会从其他库导入表到JRT要支持的库里。或者用其他语言生成导表SQL来让JRT执行SQL创建表和导入数据,为此需要一个能运行SQL脚本文件的脚步。 脚本示例,这个是用JRT的M生成迁移表SQL生成的: 导入SQL的脚本: import JRTBL…

Docker深入解析:从基础到实践

Docker基础知识 Docker是什么:定义和核心概念解释 Docker是一个开源项目,它诞生于2013年,旨在自动化应用程序的部署过程, 让应用程序能够在轻量级的、可移植的、自给自足的容器中运行。这些容器可以在几乎任何机器上运行&#xf…

Task04:DDPG、TD3算法

本篇博客是本人参加Datawhale组队学习第四次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

目录 正则 合法的URL 邮箱、电话 字符串方法 千位分割:num.slice(render, len).match(/\d{3}/g).join(,) 版本号比较 判断回文 json/Object 遍历 自身属性 for...inhasOwnProperty(key) Object.获取数组(obj):Object.keys,Object…

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

10 个能恢复硬盘丢失文件的数据恢复软件

用于从计算机、外部硬盘驱动器、USB 闪存驱动器、存储卡或其他存储设备恢复丢失、删除或损坏的数据的软件称为数据恢复软件。该软件会在存储设备中搜索丢失或损坏的文件的痕迹,然后再尝试恢复它们。 导致数据丢失或损坏的原因有多种,包括硬件故障、格式…

【论文笔记】《Learning Deconvolution Network for Semantic Segmentation》

重要说明:严格来说,论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍,请参考另一篇博客:什么是Deconvolutional Network? 一、参考资料 Learning Deconvolution Netwo…

朴素贝叶斯

一、数学基础 先验概率(Prior Probability): 先验概率是在考虑任何新观测数据之前,基于先前的知识或信仰,对事件发生的概率的初始估计。这是对事件的主观先验信仰或经验的量化体现。 记作 P(A),表示事件 …

NFS远程共享存储

NFS:Network File System 网络文件系统,NFS 和其他文件系统一样,是在 Linux 内核中实现的,因此 NFS 很难做到与 Windows 兼容。NFS 共享出的文件系统会被客户端识别为一个文件系统,客户端可以直接挂载并使用。是Unix系…

《Vue3 基础知识》 Vue2+ElementUI 自动转 Vue3+ElementPlus(GoGoCode)

前言 GoGoCode 一个基于 AST 的 JavaScript/Typescript/HTML 代码转换工具。 AST abstract syntax code 抽象语法树。 实现 第一步:安装 GoGoCode 插件 全局安装最新的 gogocode-cli 即可 npm i gogocode-cli -g查看版本 gogocode-cli -V相关插件说明 插件描述…

2024初学编曲免费软件FL Studio21.2.2

FL Studio在业内也被称作“水果”软件,这是一款功能强大、简单易上手的专业编曲软件。软件中的音效插件库拥有超过25种音效插件,能够帮助激发我们的创作灵感。而FL Studio中文还推出了训练营课程,初学者可以在训练营中进行编曲知识的学习&…

1888_关于多任务调度的一些整理与思考

全部学习汇总: g_embedded: 嵌入式通用技术学习笔记 (gitee.com) 让我想来对此做一下总结思考的书其实不是嵌入式或者至少不限于嵌入式,但是我的主业是嵌入式,对于问题的理解点暂时也是在这个领域。后续,这些知识对我自己能够产生…

Ubuntu使用Docker部署Redis并实现远程访问本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

以梦为码,CodeArts Snap 缩短我与算法的距离

背景 最近一直在体验华为云的 CodeArts Snap,逐渐掌握了使用方法,代码自动生成的准确程度大大提高了。 自从上次跟着 CodeArts Snap 学习用 Python 编程,逐渐喜欢上了 Python。 我还给 CodeArts Snap 起了一个花名: 最佳智能学…
最新文章