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

news2024/11/19 4:25:23

文章目录

  • 前言
  • 一、业务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.coloradmin.cn/o/1413325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出 diffusion(3):pytorch 实现 diffusion 中的 U-Net

导入python包 import mathimport torch import torch.nn as nn import torch.nn.functional as F silu激活函数 class SiLU(nn.Module): # SiLU激活函数staticmethoddef forward(x):return x * torch.sigmoid(x) 归一化设置 def get_norm(norm, num_channels, num_groups)…

php项目下微信小程序对接实战问题与解决方案

一.实战问题与方案总结 1.SQL查询条件是一组数,传参却是一个字符串导致报错,如下 SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from car_video where province_id in (1492) and city_id in (1493) and county_id …

Nginx编译安装以及负载均衡配置(Ubuntu 22.04)

目录 Nginx编译安装以及负载均衡配置 Ubuntu 22.04.1 LTS 编译安装 nginx-1.22.1 1.安装依赖包 2. 下载nginx 3. 编译安装 报错解决 解决问题2 4.安装 5启动Nginx: 负载均衡 负载均衡算法 轮询 加权负载均衡 ip_hash算法 算法进行配置演示 加权负载均衡 轮询 IP 哈希…

ES文档索引、查询、分片、文档评分和分析器技术原理

技术原理 索引文档 索引文档分为单个文档和多个文档。 单个文档 新建单个文档所需要的步骤顺序: 客户端向 Node 1 发送新建、索引或者删除请求。节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 …

[MQ]常用的mq产品图形管理web界面或客户端

一、MQ介绍 1.1 定义 MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。 如果非要用一个定义来概括只能是抽象出来一些概念,概括为跨服务之间传递信息的软件。 1.2 MQ产品 较为成熟的MQ产品:IBMMQ(IBM We…

《动手学深度学习(PyTorch版)》笔记4.1

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…

万界星空科技可视化数据大屏的作用

随着科技的不断发展和进步,当前各种数据化的设备也是如同雨后春笋般冒了出来,并且其可以说是给我们带来了极大的便利的。在这其中,数据大屏就是非常具有代表性的一个例子。 数据大屏的主要作用包括: 数据分析:数据大屏…

k8s 进阶实战笔记 | Pod 创建过程详解

Pod 创建过程详解 ​ 初始状态0 controller-manager、scheduler、kubelet组件通过 list-watch 机制与 api-server 通信并检查资源变化 第一步 用户通过 CLI 或者 WEB 端等方式向 api-server 发送创建资源的请求(比如:我要创建一个replicaset资源&…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的,minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的,操作命令也是一样的,有需要我…

Redis创建集群

主要内容 搭建redis集群 能力目标 搭建redis集群 一 应用场景 为什么需要redis集群? 当主备复制场景,无法满足主机的单点故障时,需要引入集群配置。 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优…

【C/C++】C/C++编程——C++ 关键字和数据类型简介

C 关键字和数据类型简介 大家好,我是 shopeeai,也可以叫我虾皮,中科大菜鸟研究生。昨天已经成功运行了第一个C程序,今天来学习一下C 关键字和数据类型。C 中的关键字是由 C 标准预先定义的。它们被保留作为语言的一部分&#xff…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

Golang中make与new有何区别

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于go进阶系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系…

【新课上架】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

01 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性,同时提高性能。本课程基于当前主流版本Oracle 19cOEL7.9解析如何搭建2节点RAC对1节点单机的DATA GU…

滴滴基于 Ray 的 XGBoost 大规模分布式训练实践

背景介绍 作为机器学习模型的核心代表,XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此,保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时,面对多样化的业务场景定制需求和数据规…

学习gin框架知识的注意点

这几天重新学习了一遍gin框架:收获颇多 Gin框架的初始化 有些项目中 初始化gin框架写的是: r : gin.New() r.Use(logger.GinLogger(), logger.GinRecovery(true)) 而不是r : gin.Default() 为什么呢? 点击进入Default源码发现其实他也是…

大数据就业方向-(工作)ETL开发

上一篇文章: 大数据 - 大数据入门第一篇 | 关于大数据你了解多少?-CSDN博客 目录 🐶1.ETL概念 🐶2. ETL的用处 🐶3.ETL实现方式 🐶4. ETL体系结构 🐶5. 什么是ETL技术? &…

Linux——搭建FTP服务器

1、FTP简介 FTP(File Transfer Protocol) :是一种处于应用层的用于文件传输的协议。FTP客户端和FTP服务器之间的通信使用TCP/IP协议族。它规定了客户端和服务器之间的通信格式和命令集,包括用户认证、文件传输、文件名和目录信息等,允许用户…

掌握可视化大屏:提升数据分析和决策能力的关键(下)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java - OpenSSL与国密OpenSSL

文章目录 一、定义 OpenSSL:OpenSSL是一个开放源代码的SSL/TLS协议实现,也是一个功能丰富的加密库,提供了各种主要的加密算法、常用的密钥和证书封装管理功能以及SSL协议。它被广泛应用于Web服务器、电子邮件服务器、VPN等网络应用中&#x…