【面试必看】系统设计

系统设计

1. 认证与授权

  • Authentication(认证)验证您的身份的凭据(例如用户名/用户 ID 和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户,也叫做身份/用户验证。(你是谁)

认证登录

  • Authorization(授权) 发生在 Authentication(认证) 之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如 admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。(你能干什么)

没有权限

二者结合使用,保证系统安全性

2. RBAC模型

系统权限控制最常采用的访问控制模型就是 RBAC 模型 ,基于角色的权限访问控制(Role-Based Access Control)。这是一种通过角色关联权限,角色同时又关联用户的授权的方式。(都是多对多关系)

RBAC 权限模型示意图

img

3. Cookie & Session

1. what

CookieSession 都是用来跟踪浏览器用户身份会话方式。

Cookie 存放在客户端,一般用来保存用户信息(加密)。

  • 保存 SessionId 或者 Token ,向后端发送请求的时候带上 Cookie,这样后端就能取到 Session 或者 Token ,这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。

  • 用来记录和分析用户行为

Session 通过服务端记录用户的状态

2. 用Session-Cookie方案进行身份验证

适合单体环境,通过 SessionID 来实现特定的用户,一般会选择存在 Redis 中。

img

  1. 用户向服务器发送用户名、密码、验证码用于登陆系统。

  2. 服务器验证通过后,服务器为用户创建一个 Session,并将 Session 信息存储起来。

  3. 服务器向用户返回一个 SessionID写入用户的 Cookie

  4. 当用户保持登录状态时,Cookie与每个后续请求一起被发送出去。

  5. 服务器可以将存储在 Cookie 上的 SessionID 与存储在内存中或者数据库中的 Session 信息进行比较,以验证用户的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。

  • 依赖 Session 的关键业务一定要确保客户端开启Cookie

  • 注意 Session过期时间

3. 多服务器节点下的 Session-Cookie 怎么做?

例如:假如我们部署了两份相同的服务 A,B,用户第一次登陆的时候 ,Nginx 通过负载均衡机制将用户请求转发到 A 服务器,此时用户的 Session 信息保存在 A 服务器。结果,用户第二次访问的时候 Nginx 将请求路由到 B 服务器,由于 B 服务器没有保存 用户的 Session 信息,导致用户需要重新进行登陆。

  1. 每一个服务器保存的 Session 信息都是互相同步的。

  2. 单独使用一个所有服务器都能访问到的数据节点(比如缓存)来存放 Session 信息。

  3. Spring Session 是一个用于在多个服务器之间管理会话的项目。将会话数据存储在共享的外部存储中,以实现跨服务器的会话同步和共享。

4. 没有Cookie那Session还能用吗?

一般是通过 Cookie 来保存 SessionID,还可以将 SessionID 放在请求的 url 里面https://javaguide.cn/?Session_id=xxx 。这种方案的话可行,但是安全性和用户体验感降低。当然,为了安全你也可以对 SessionID 进行一次加密之后再传入后端。

5. 为什么Cookie防不住CSRF攻击,而Token可以?

CSRF(Cross Site Request Forgery) 跨站请求伪造:就是用你的身份去发送一些对你不友好的请求。

<a src=http://www.mybank.com/Transfer?bankId=11&money=10000>科学理财,年盈利率过万</>

如果别人通过 Cookie 拿到了 SessionId 后就可以代替你的身份访问系统了。

在我们登录成功获得 Token 之后,一般会选择存放在 localStorage (浏览器本地存储)中。然后我们在前端通过某些方式会给每个发到后端的请求加上这个 Token,这样就不会出现 CSRF 漏洞的问题。因为,即使你点击了非法链接发送了请求到服务端,这个非法请求是不会携带 Token 的,所以这个请求将是非法的

但是,不论是 Cookie 还是 Token 都无法避免 跨站脚本攻击(Cross Site Scripting)XSS

4. JWT

1. what

JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token

此图片来源于:https://supertokens.com/blog/oauth-vs-jwt

JWT 本质上就是一组字符串,通过(.)切分成三个为 Base64 编码的部分:

  • Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token类型

  • Payload : 用来存放实际需要传递的数据

  • Signature(签名):服务器通过 Payload、Header 和一个密钥使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。(防止JWT被篡改)

JWT 通常是这样的:xxxxx.yyyyy.zzzzz

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

2. 身份验证

服务器通过 Payload、Header 和 Secret(密钥)创建 JWT 并将 JWT 发送给客户端。 客户端接收到 JWT 之后,会将其保存在 Cookie 或者 localStorage 里面,以后客户端发出的所有请求都会携带这个令牌。

JWT 身份验证示意图

请求服务端并携带 JWT 的常见做法是将其放在 HTTP Header 的 Authorization 字段中(Authorization: Bearer Token)。

3. 如何防止JWT被篡改?

因为服务端拿到 JWT 之后,会解析出其中包含的 Header、Payload 以及 Signature 。 服务端会根据 Header、Payload、密钥再次生成一个 Signature。 拿新生成的 Signature 和 JWT 中的 Signature 作对比,如果一样就说明 Header 和 Payload 没有被修改。

JWT 安全的核心在于签名,签名安全的核心在密钥。(密钥泄漏就可能会被篡改)

4. 加强JWT安全性

  1. 使用安全系数高的加密算法

  2. 使用成熟的开源库,没必要造轮子。

  3. JWT 存放在 localStorage 中而不是 Cookie 中,避免 CSRF 风险。

  4. 一定不隐私信息存放在 Payload 当中。

  5. 密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。

  6. Payload 要加入 exp (JWT 的过期时间),永久有效的 JWT 不合理。并且,JWT 的过期时间不易过长。

5. 优缺点

  • 无状态(自身包含了身份验证所需要的所有信息)

  • 避免CSRF(使用 JWT 进行身份验证不需要依赖 Cookie)

  • 适合移动端应用(兼容性)

  • 单点登录友好(JWT 被保存在客户端 localStorage)

5. SSO

1. what

SSO (Single Sign On) 单点登录: 说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东国际、京东生鲜等子系统。

SSO 示意图

  • 用户角度 :用户能够做到一次登录多次使用,无需记录多套用户名和密码,省心。

  • 系统管理员角度 : 管理员只需维护好一个统一的账号中心就可以了,方便。

  • 新系统开发角度: 新系统开发时只需直接对接统一的账号中心即可,简化开发流程,省时。

6. OAuth2.0

一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限,最终目的是为第三方应用颁发一个有时效性的令牌 Token,使得第三方应用能够通过该令牌获取相关的资源。(第三方登录、支付、开发平台)

img

OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

简单解释

7. Java定时任务

某个特定的时间去做某个事情,也就是定时或者延时去做某个事情,将任务的执行时间安排在未来的某个点上,以达到预期的调度效果。

1. 单机定时

Spring Task

2. 分布式定时任务

Redis 是可以用来做延时任务的,基于 Redis 实现延时任务的功能无非就下面两种方案:

  1. Redis 过期事件监听

  2. Redisson 内置的延时队列

MQ 大部分消息队列,例如 RocketMQ、RabbitMQ,都支持定时/延时消息。定时消息和延时消息本质其实是相同的,都是服务端根据消息设置的定时时间在某一固定时刻将消息投递给消费者消费。

不过,在使用 MQ 定时消息之前一定要看清楚其使用限制,以免不适合项目需求,例如 RocketMQ 定时时长最大值默认为 24 小时且不支持自定义修改、只支持 18 个 Level 的延时并不支持任意时间。

  • 优点:可以与 Spring 集成、支持分布式、支持集群、性能不错

  • 缺点:功能性较差、不灵活、需要保障消息可靠性

3. 分布式任务调度

支持任务在分布式场景下的分片和高可用。

一个分布式定时任务的执行往往涉及到下面这些角色:

  • 任务:首先肯定是要执行的任务,这个任务就是具体的业务逻辑比如定时发送文章。

  • 调度器:其次是调度中心,调度中心主要负责任务管理,会分配任务给执行器。

  • 执行器:最后就是执行器,执行器接收调度器分派的任务并执行。

XXL-JOB、PowerJob

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

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

相关文章

所有平台均可发布,矩阵操作+工具+素材,自动混剪8090后怀旧视频

“怀旧”这个词对于80、90后来说&#xff0c;总能勾起一阵阵心中的涟漪。无论是那些留存在记忆深处的动画经典&#xff0c;还是代代相传的游戏主题曲&#xff0c;亦或是那个时代特有的玩具&#xff0c;都构成了他们共同的美好回忆。就像乘坐一艘穿梭机&#xff0c;怀旧视频能够…

无人机行业所需企业服务等级证书详解

无人机行业中的民用无人机企业服务等级证书是对企业在无人机服务领域的能力、技术、管理和服务质量等方面的一种全面认可和评定。这种证书的存在&#xff0c;不仅有助于企业了解自身服务能力和水平&#xff0c;提升服务质量&#xff0c;增强市场竞争力&#xff0c;促进规范化管…

【有效的数独】python

目录 很好&#xff0c;超级暴力做法&#xff0c;能过就行&#xff0c;优雅个锤子啊 优雅的做法 &#xff0c;绅士&#xff0c;噢听说叫模拟 很好&#xff0c;超级暴力做法&#xff0c;能过就行&#xff0c;优雅个锤子啊 我直接11个2层for循环暴力秒杀 class Solution:def is…

使用 SwanLab 进行可视化 MNIST 手写体识别训练

使用 SwanLab 进行可视化 MNIST 手写体识别训练 在线演示demo 本案例主要&#xff1a; 使用pytorch进行CNN&#xff08;卷积神经网络&#xff09;的构建、模型训练与评估使用swanlab跟踪超参数、记录指标和可视化监控整个训练周期 一、相关简介 SwanLab SwanLab是一款开源…

Vue基础(数据绑定、export使用)

1、简介 在使用vue开发的过程中&#xff0c;经常会遇到一些容易混淆的问题&#xff0c;因此&#xff0c;在本文中进行汇总操作&#xff0c;只有通过不断总结学习&#xff0c;才能更好掌握vue的使用&#xff08;每天进步一点&#xff09;。 2、数据绑定 在js中定义数据&#xf…

三分钟一条AI小和尚视频 ,日引300+创业粉。单日变现四位数 全套工具

经过六个月的不懈努力和无数次的尝试错误&#xff0c;我终于找到了一个高效引流和积累粉丝的新策略&#xff0c;并愿意与大家无私分享。这一次&#xff0c;我将详尽地介绍这个方法&#xff0c;建议朋友们多次观看以彻底掌握其精髓。 简而言之&#xff0c;该策略主要依托于AI绘…

Spring 原理详解

1. Bean的作用域 Bean在Spring中表示的是Spring管理的对象&#xff0c;Bean的作用域是只Bean在Spring框架中的某种行为模式。 在Spring中&#xff0c;支持6中作用域&#xff1a; singleton&#xff1a;单例作用域&#xff0c;在整个 Spring IoC 容器中&#xff0c;只创建一个…

Json差异比较

json差异比较 如何比较两个json的差异 代码实现 导入依赖 <dependency><groupId>cn.xiaoandcai</groupId><artifactId>json-diff</artifactId><!-- 旧版本可能存在某些缺陷。版本请以maven仓库最版为准。 --><version>4.1.3-RC1-R…

没想到,一个小妙招让桌面运维效率翻倍

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 我的网工朋友大家好。 咱们都知道&#xff0c;电脑用久了&#xff0c;总会出些小毛病&#xff0c;比如桌面图标不显示了&#xff0c;C盘又满了&a…

springboot+minio 文件上传

前期准备 需要先安装minio文件服务器&#xff0c;请参考我上一篇文章 pom.xml 版本 本次使用的是springboot2.7.16 版本&#xff0c; minio 版本是8.2.2 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare…

利用AI办公工具类API,大幅提高办公效率

AI办公工具类API是一项革命性的技术&#xff0c;利用人工智能的力量为办公场景提供了许多创新的解决方案。借助AI办公工具类API&#xff0c;用户可以实现自动化的文档处理、语音转文字、图像识别、数据分析等多种功能&#xff0c;大大提高了办公效率和工作质量。此外&#xff0…

Uni-App开发 导入(引入)Vant-Weapp组件;支持vue3/vue2版本和微信小程序

文章目录 目录 文章目录 操作流程 小结 概要安装流程技术细节小结 概要 Vant Weapp官网&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 准备工作&#xff0c;需要确保自己的电脑上已安装Hbuilde和node 全程操作的环境都需要这些配合才能运行上&#xff0c;可参考作者…

如何彻底搞懂组合(Composite)设计模式?

当我们在设计系统对象关系时&#xff0c;有时候会碰到这样一种场景&#xff0c;一个对象中包含了另一组对象&#xff0c;两者构成一种”部分-整体”的关联关系。 正如上图中所展示的&#xff0c;当我们面对这样一种对象关系时&#xff0c;通常都需要分别构建单独的访问方式&…

数据挖掘案例-航空公司客户价值分析

文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …

【面经】单片机

1、单片机IO口工作方式 输入 模拟输入&#xff08;GPIO_Mode_AIN&#xff09;&#xff1a;关闭施密特触发器&#xff0c;将电压信号传送到片上外设模块&#xff0c;通常用于连接模拟信号源。浮空输入&#xff08;GPIO_Mode_IN_FLOATING&#xff09;&#xff1a;在浮空输入状态…

回收站清空的文件怎么恢复?8个方法公开(2024更新版)

“我太粗心了&#xff0c;刚想恢复部分回收站中误删的重要文件&#xff0c;一不小心把回收站清空了&#xff0c;现在还有什么方法可以恢复它们吗&#xff1f;” 在数字时代&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着我们对电脑的依赖加…

etcd 和 MongoDB 的混沌(故障注入)测试方法

最近在对一些自建的数据库 driver/client 基础库的健壮性做混沌&#xff08;故障&#xff09;测试, 去验证了解业务的故障处理机制和恢复时长. 主要涉及到了 MongoDB 和 etcd 这两个基础组件. 本文会介绍下相关的测试方法. MongoDB 中的故障测试 MongoDB 是比较世界上热门的文…

【算法】排序——加更

补充1个排序&#xff1a;希尔排序 思路&#xff1a;首先定义一个gap,从第0个数开始&#xff0c;每隔一个gap取出一个数&#xff0c;将取出来的数进行比较&#xff0c;方法类似插入排序。第二轮从第二个数开始&#xff0c;每隔一个gap取出一个数再进行插入排序。四轮就可以取完…

新手一次过软考高级(系统规划与管理师)秘笈,请收藏!

2024上软考已经圆满结束&#xff0c;距离下半年的考试也只剩下半年不到的时间。需要备考下半年软考高级的小伙伴们可以抓紧开始准备了&#xff0c;毕竟高级科目的难度可是不低的。 今天给大家整理了——系统规划与管理师的备考资料 &#xff0c;都是核心重点&#xff0c;有PDF&…

微博v14.5.1,集成猪手模块2.3.0-276,移除广告和各类推广提示

软件介绍 微博 v14.5.1&#xff0c;内置猪手模块直装版是一款专业优化的微消客户端&#xff0c;该软件融合了咸猪手模块&#xff0c;并提供了用户友好的自定义选项。这些选项包括广告移除、停止推荐内容、消除各类提示消息等功能&#xff0c;旨在提升用户的个性化使用体验。 …