Backend Analogy

一家超级大的“网上玩具店”。

从小朋友点击“我要买一个玩具”开始,把后端背后的网络、Java、JVM、Web、Spring、分层、数据库、Redis、MQ、微服务、部署、协作和安全串成一条能讲明白的故事线。

0 计算机与网络基础

先有地、有路、有门牌号

后端公司开张前,必须先有服务器、Linux、端口、网络、HTTP 和 DNS。

小朋友在浏览器输入玩具店网址时,浏览器要先知道这家店在哪栋楼、从哪个门进去、用什么规则说话。计算机与网络基础就是网上玩具店的地面、道路、门牌号和电话簿。

关系一句话

先有服务器和网络,浏览器才能找到后端;先有端口和 HTTP,前端才能知道从哪里进去、怎么说话。

关系图

先有地、有路、有门牌号的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

先有地、有路、有门牌号的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

大楼对应服务器的卡通场景图

大楼

服务器

后端公司所在地

门牌号对应端口的卡通场景图

门牌号

端口

从哪个门进去

电话簿对应DNS的卡通场景图

电话簿

DNS

把店名翻译成地址

说话规则对应HTTP的卡通场景图

说话规则

HTTP

前后端递纸条格式

类比映射表

后端公司所在的大楼 服务器

代码和服务真正运行的地方

大楼的安保和管理系统 Linux

负责管理文件、进程、权限和资源

每个房间的门牌号 端口

不同服务通过不同端口接待请求

送信和打电话的道路 网络

让浏览器和服务器能互相通信

前后端说话的规则 HTTP

规定请求和响应怎么表达

把店名翻译成地址的电话簿 DNS

把域名解析成真正能访问的地址

新手先记住

网络基础不是背概念,而是搞清楚:请求要先找到楼,再找到门,再按规则递纸条。

讲给自己听

看着图讲一遍:浏览器输入网址后,DNS、网络、服务器、端口、HTTP 分别在干什么?

下一站:搞清楚店在哪里以后,下一步要让店里的员工会同一种工作语言,也就是 Java。
1 Java 语言基础

员工要会一种工作语言

Java 就像玩具店员工统一使用的工作语言,用来记东西、做动作、处理错误和多人协作。

老板想让员工办事,就要用一套大家都懂的工作语言写规则。变量像小纸条,方法像固定动作,类像玩具模板,对象像真正的玩具,线程像多个员工同时干活。

关系一句话

Java 基础先解决“员工怎么表达和协作”:用变量记东西,用类型规定东西,用方法做动作,用类和对象组织现实世界。

关系图

员工要会一种工作语言的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

员工要会一种工作语言的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

小纸条对应变量的卡通场景图

小纸条

变量

记一个东西

玩具模具对应类的卡通场景图

玩具模具

一类东西的模板

红色小汽车对应对象的卡通场景图

红色小汽车

对象

具体玩具

多个员工对应线程的卡通场景图

多个员工

线程

同时干活

类比映射表

小纸条,记一个东西 变量

保存数据

规定纸条写数字、文字还是对错 类型

限制和解释数据的含义

固定动作,例如查库存 方法

封装一段可重复执行的逻辑

玩具模具

定义一类对象有什么属性和行为

真正的红色小汽车 对象

根据类创建出来的具体东西

装很多玩具的盒子 集合

管理一组数据

按名字快速找东西的小字典 HashMap

通过 key 快速找到 value

读订单文件、保存图片 IO

和文件或外部数据交互

出错时的处理流程 异常

让程序知道失败时怎么办

多个员工同时工作 线程

一个进程里的多个执行流

一家正在营业的店铺 进程

一个正在运行的程序实例

新手先记住

学 Java 基础时,不要只背语法,要想象你在教员工怎么记、怎么做、怎么分工、出错怎么办。

讲给自己听

用玩具店语言讲一遍:变量、类型、方法、类、对象分别像什么?它们怎么配合完成“查库存”?

下一站:员工会语言后,还需要一套工具平台把 Java 翻译给机器听。
2 JDK / JRE / JVM

给 Java 配一套翻译和运行平台

JDK 像完整平台,JRE 像简化运行平台,JVM 像翻译机兼清洁机器人。

电脑像只能理解 0 和 1 的铁皮盒子,它不直接懂 Java。JDK 负责承载、翻译和控制 Java;JVM 把字节码运行起来,还负责管理内存;JRE 是少了开发工具的运行环境。

关系一句话

程序员写 .java,编译后变成 .class,JVM 执行字节码。JDK 面向开发,JRE 面向运行,JVM 是真正执行字节码的核心。

关系图

给 Java 配一套翻译和运行平台的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

给 Java 配一套翻译和运行平台的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

完整工具箱对应JDK的卡通场景图

完整工具箱

JDK

开发+运行平台

运行地基对应JRE的卡通场景图

运行地基

JRE

只负责跑起来

翻译机器人对应JVM的卡通场景图

翻译机器人

JVM

执行并清理空间

中间文件对应字节码的卡通场景图

中间文件

字节码

机器可执行指令前的一步

类比映射表

完整的语言承载平台 JDK

包含开发工具、运行环境和 JVM

简化版平台 JRE

用于运行 Java 程序

翻译机兼清洁机器人 JVM

执行字节码,并管理内存回收

程序员看得懂的工作规则 .java 源码

人写的 Java 代码

JVM 能看懂的中间文件 .class 字节码

跨平台运行的关键

新手先记住

JVM 不是写代码的工具,而是让 Java 真正跑起来的翻译执行机器。

讲给自己听

看着图讲一遍:为什么电脑不能直接懂 Java?.java、.class、JDK、JRE、JVM 的顺序和包含关系是什么?

下一站:Java 能运行以后,下一步要让它接待网页来的客人。
3 Java Web 基础

开始接待网上来的客人

Java Web 让 Java 能接电话、看纸条、回纸条,并记住这个客人是谁。

小朋友点网页按钮后,会发来“我要买玩具”“我要查订单”“我要登录”等请求。Java Web 负责接住这些请求,看懂请求内容,再返回处理结果。

关系一句话

浏览器把请求交给 Tomcat,Java 程序通过 Request 读纸条,通过 Response 回纸条,Cookie / Session 记住用户身份。

关系图

开始接待网上来的客人的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

开始接待网上来的客人的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

客人纸条对应Request的卡通场景图

客人纸条

Request

请求

回信纸条对应Response的卡通场景图

回信纸条

Response

响应

接电话机器对应Tomcat的卡通场景图

接电话机器

Tomcat

接 Web 请求

身份小牌子对应Cookie / Session的卡通场景图

身份小牌子

Cookie / Session

记住用户

类比映射表

客人送来的纸条 Request

浏览器发给后端的请求

店员回给客人的纸条 Response

后端返回给前端的结果

接电话的机器 Tomcat

接收 Web 请求并交给 Java 程序

记住你是谁的小牌子 Cookie / Session

保存登录状态或用户标识

常用传纸条格式 JSON

请求和响应里常见的数据格式

新手先记住

Java Web 的核心是后端能不能接收请求、理解请求、返回结果、识别用户。

讲给自己听

用“客人递纸条”的过程讲一遍:Request、Response、Tomcat、Cookie/Session 分别负责什么?

下一站:请求越来越多后,如果员工乱干活,系统会很乱,所以需要 Spring 大管家。
4 Spring 体系

让大管家管理所有员工

Spring 像后端公司的大管家,帮你管理对象、请求、安全、配置和多个服务协作。

没有 Spring 时,你要自己安排谁接待、谁查仓库、谁记账、谁处理登录和错误。Spring 把对象创建、依赖关系、请求分发、安全校验和配置管理都组织起来。

关系一句话

Spring Framework 是基础管家,Spring MVC 管 Web 请求,Spring Boot 帮你快速开店,Spring Security 管门禁,Spring Cloud 管分店协作。

关系图

让大管家管理所有员工的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

让大管家管理所有员工的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

大管家对应Spring Framework的卡通场景图

大管家

Spring Framework

统一安排员工

请求主管对应Spring MVC的卡通场景图

请求主管

Spring MVC

管理网页请求

开店套装对应Spring Boot的卡通场景图

开店套装

Spring Boot

快速启动项目

门禁对应Spring Security的卡通场景图

门禁

Spring Security

身份检查

类比映射表

最底层的大管家 Spring Framework

管理 Bean、依赖注入和基础能力

专门管网页请求的主管 Spring MVC

处理 Controller、路由和请求响应

快速开店套装 Spring Boot

减少配置,快速启动项目

门禁和身份检查 Spring Security

处理认证和授权

分店协作工具 Spring Cloud

服务拆分后做注册、调用、配置等协作

新手先记住

Spring 不是替你写业务,而是帮你把对象、流程和基础设施管理好。

讲给自己听

用“店铺大管家”的类比讲一遍:为什么后端项目需要 Spring?这些 Spring 组件分别像什么角色?

下一站:有了大管家后,还要规定员工分工,避免前台、办事员、仓库管理员互相越权。
5 经典后端分层

让店内部按岗位分工

Controller 接待,Service 办事,Mapper 查仓库,数据库存资料。

小朋友说“我要查我的订单”时,前台不能直接跑去仓库乱翻,仓库管理员也不能决定能不能退款。分层就是让每个岗位做自己的事。

关系一句话

请求先到 Controller,再交给 Service 做业务判断,Service 调 Mapper 查数据库,最后结果一层层返回。

关系图

让店内部按岗位分工的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

让店内部按岗位分工的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

前台对应Controller的卡通场景图

前台

Controller

接待客人

办事员对应Service的卡通场景图

办事员

Service

做业务判断

仓库管理员对应Mapper / DAO的卡通场景图

仓库管理员

Mapper / DAO

查仓库

大仓库对应数据库的卡通场景图

大仓库

数据库

存长期资料

类比映射表

前台 Controller

接收请求,返回结果

真正办事的人 Service

处理业务规则和判断

仓库管理员 Mapper / DAO

和数据库交互

大仓库 数据库

保存订单、用户、库存等数据

新手先记住

分层不是为了文件夹好看,而是为了职责清楚:接待、办事、查仓库不能混在一起。

讲给自己听

用“查订单”场景讲一遍:Controller、Service、Mapper、数据库分别做什么?为什么前台不能直接查仓库?

下一站:分层清楚后,下一步要把重要资料真正存进大仓库。
6 数据库与持久化

重要资料要放进大仓库

数据库像大仓库,MySQL 是常见仓库,SQL 是和仓库说话的命令,MyBatis 是翻译员。

如果玩具店只把订单记在脑子里,员工下班后就忘了。用户、订单、商品、库存、支付、权限等重要资料要放进数据库大仓库。Java 员工通过 Mapper 发起任务,MyBatis 把 Java 的话翻译成 SQL,再把数据库结果变回 Java 能用的对象。

关系一句话

Service 提业务需求,Mapper 接任务,MyBatis 翻译成 SQL,MySQL 查出数据,MyBatis 再转成 Java 对象。

关系图

重要资料要放进大仓库的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

重要资料要放进大仓库的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

查一下对应select的卡通场景图

查一下

select

帮我找资料

新增箱子对应insert的卡通场景图

新增箱子

insert

放入新资料

修改标签对应update的卡通场景图

修改标签

update

更新已有资料

移走箱子对应delete的卡通场景图

移走箱子

delete

删除资料

翻译员对应MyBatis的卡通场景图

翻译员

MyBatis

Java 话 ↔ SQL

类比映射表

大仓库 数据库

长期保存重要资料

常见仓库品牌 MySQL

常用关系型数据库

和仓库说话的命令 SQL

select / insert / update / delete

仓库管理员 Mapper / DAO

负责数据库访问入口

Java 和仓库之间的翻译员 MyBatis

把 Java 调用和 SQL、结果对象互相转换

新手先记住

数据库负责长期保存重要资料,MyBatis 负责让 Java 更方便地和数据库沟通。

讲给自己听

用“查订单”的过程讲一遍:Service、Mapper、MyBatis、SQL、MySQL 分别在流程里做什么?

下一站:数据库可靠但可能慢,常用东西可以先放到前台桌上的小本子里。
7 缓存与 Redis

常用东西可以放桌上

Redis 像前台桌上的小本子,查得快;MySQL 像远处大仓库,可靠但每次去拿可能慢。

用户登录状态、验证码、热门商品、菜单权限、访问次数、排行榜和临时数据,可以先放 Redis 小本子。查东西时先看 Redis,有就直接用;没有再去 MySQL 查,查到后顺便抄一份到 Redis。

关系一句话

读数据时先查 Redis,命中就返回;未命中再查 MySQL,并把结果回填到 Redis。长期权威数据仍以数据库为准。

关系图

常用东西可以放桌上的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

常用东西可以放桌上的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

小本子对应Redis的卡通场景图

小本子

Redis

手边快速查

计数牌对应计数器的卡通场景图

计数牌

计数器

访问次数

排行榜对应Sorted Set的卡通场景图

排行榜

Sorted Set

热门排名

临时锁对应分布式锁的卡通场景图

临时锁

分布式锁

防重复点击

验证码便签对应TTL 临时数据的卡通场景图

验证码便签

TTL 临时数据

短期有效

类比映射表

前台桌上的小本子 Redis

读写很快,常用作缓存

远处的大仓库 MySQL

长期保存可靠数据

小本子有就直接用 缓存命中

不用访问数据库

小本子没有再去仓库 缓存未命中

回源查数据库

抄一份回小本子 回填缓存

下次访问更快

新手先记住

Redis 不是替代数据库,而是把常用、临时、需要快速访问的数据放到手边。

讲给自己听

用“小本子和大仓库”讲一遍:为什么验证码、登录状态、排行榜适合放 Redis?为什么重要订单还要进 MySQL?

下一站:有些慢事情不必让客人等,可以放到后台异步慢慢做。
8 异步、定时任务、消息队列

有些事情不需要让客人一直等

核心事情先做完,慢事情放后台、闹钟或消息快递站慢慢处理。

小朋友买玩具时最重要的是订单创建成功。发短信、加积分、通知仓库、生成报表、统计销量、提醒未付款等事情可以后台处理。异步是不让客人一直等,定时任务像闹钟,消息队列像快递站或传话筒。

关系一句话

订单创建属于核心流程,短信、积分、统计等可丢进 MQ 或异步任务;定时任务按闹钟触发周期性工作。

关系图

有些事情不需要让客人一直等的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

有些事情不需要让客人一直等的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

先盖章成功对应同步主流程的卡通场景图

先盖章成功

同步主流程

核心流程先完成

后台待办篮对应异步任务的卡通场景图

后台待办篮

异步任务

慢活稍后做

闹钟对应定时任务的卡通场景图

闹钟

定时任务

按时间做事

快递站对应MQ的卡通场景图

快递站

MQ

把消息分发给员工

传话筒对应RabbitMQ的卡通场景图

传话筒

RabbitMQ

业务通知

大传送带对应Kafka的卡通场景图

大传送带

Kafka

海量日志流

类比映射表

先回复客人,后台慢慢做 异步

不阻塞主流程

墙上的闹钟 定时任务

按时间触发检查、清理、报表等任务

消息快递站 消息队列 MQ

把事件交给其他员工处理

业务传话筒 RabbitMQ

适合订单、短信、通知等业务消息

超大传送带 Kafka

适合大量日志和数据流

新手先记住

不是所有事情都要让用户等。核心先成功,慢活拆出去,系统体验会更好。

讲给自己听

用“订单成功后发短信和加积分”的场景讲一遍:异步、定时任务、MQ、RabbitMQ、Kafka 分别适合做什么?

下一站:店越做越大,一个服务不够,就要拆成很多小店和部门。
9 微服务与分布式

一个店铺不够了,要拆成很多小店

微服务像把大公司拆成很多部门,再用通讯录、大门、电话、保安、记账员和协调员连起来。

生意大了以后,一个后端服务会很乱,于是拆成用户服务、订单服务、商品服务、支付服务、消息服务、文件服务、权限服务。新问题是服务怎么互相找到、怎么统一入口、怎么互相调用、怎么限流、怎么保证多服务数据别改乱。

关系一句话

Gateway 负责统一入口,服务去 Nacos 登记和发现,服务间用 Feign 调用,Sentinel 保护流量,Seata 协调事务,ZooKeeper 做更底层协调。

关系图

一个店铺不够了,要拆成很多小店的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

一个店铺不够了,要拆成很多小店的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

服务小店对应微服务的卡通场景图

服务小店

微服务

用户/订单/商品服务

通讯录对应Nacos的卡通场景图

通讯录

Nacos

服务登记和查找

总大门对应Gateway的卡通场景图

总大门

Gateway

统一入口

部门电话对应Feign的卡通场景图

部门电话

Feign

服务互相调用

保安盾牌对应Sentinel的卡通场景图

保安盾牌

Sentinel

人太多就限流

总账本对应Seata的卡通场景图

总账本

Seata

多服务别改乱

协调旗对应ZooKeeper的卡通场景图

协调旗

ZooKeeper

谁当队长谁拿锁

类比映射表

很多小店/部门 微服务

按业务拆分独立服务

通讯录 Nacos

服务注册、发现和配置管理

总大门 Gateway

统一入口和路由转发

部门之间的电话 Feign

服务之间声明式调用

保安 Sentinel

限流、熔断、降级

总记账员 Seata

分布式事务协调

协调员 ZooKeeper

协调、选主、锁、状态感知

新手先记住

微服务不是简单拆文件夹,而是拆成多个独立服务后,还要解决找得到、调得通、扛得住、数据不乱。

讲给自己听

用“大公司拆部门”的类比讲一遍:订单服务如何找到商品服务?请求从哪里进?人太多怎么办?多服务改数据怎么防乱?

下一站:服务写完以后,要搬到真正营业的大楼里。
10 部署与运维

代码要搬到真正营业的大楼里

部署运维就是把练习店搬到服务器大楼里,让它能一直营业,坏了也能查原因。

你在自己电脑上写好的后端只是练习店。真正给别人用,要放到 Linux 服务器上。Nginx 像门卫,Docker 像标准集装箱,Kubernetes 像管理很多集装箱的大队长,CI/CD 像提交代码后自动检查、打包、测试、部署的流水线。

关系一句话

代码经过 CI/CD 打包部署到服务器,Nginx 接入口转发请求,Docker 保证环境一致,Kubernetes 管理大量容器和服务稳定。

关系图

代码要搬到真正营业的大楼里的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

代码要搬到真正营业的大楼里的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

营业大楼对应Linux 服务器的卡通场景图

营业大楼

Linux 服务器

线上机器

门卫对应Nginx的卡通场景图

门卫

Nginx

分发请求

集装箱对应Docker的卡通场景图

集装箱

Docker

程序和环境一起搬

大队长对应Kubernetes的卡通场景图

大队长

Kubernetes

管理很多箱子

自动流水线对应CI/CD的卡通场景图

自动流水线

CI/CD

提交后自动上线

类比映射表

真正营业的大楼 Linux 服务器

线上服务运行环境

大楼门口的门卫 Nginx

区分静态页面和接口请求,做转发

标准集装箱/加盟合同 Docker

把程序和环境一起打包

集装箱大队长 Kubernetes

编排、扩缩容、故障恢复

自动流水线 CI/CD

自动检查、打包、测试、部署

新手先记住

部署运维解决的是:程序放哪里跑、怎么稳定跑、坏了怎么恢复、怎么更轻松上线。

讲给自己听

用“搬店开业”的类比讲一遍:Linux、Nginx、Docker、Kubernetes、CI/CD 分别解决什么问题?

下一站:多人一起造这家店,还需要工程协作和项目管理工具。
11 工程协作与项目管理工具

很多人一起写这家店,需要合作工具

工程工具让很多程序员能一起造店:拿依赖、管历史、做测试、写接口说明、看日志。

一个人写小程序可以随便放,多人写大后端必须有协作规则。Maven 像采购员和打包员,Git 像代码历史记录本,JUnit 像小考卷,Swagger/Knife4j/Postman/Apifox 像接口说明书和测试工具,日志工具像工作日记。

关系一句话

Maven 管依赖和打包,Git 管历史协作,JUnit 做自动测试,接口工具连接前后端,日志帮助排查线上问题。

关系图

很多人一起写这家店,需要合作工具的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

很多人一起写这家店,需要合作工具的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

依赖包裹对应Maven的卡通场景图

依赖包裹

Maven

帮你拿工具

历史分支树对应Git的卡通场景图

历史分支树

Git

记录代码变化

小考卷对应JUnit的卡通场景图

小考卷

JUnit

测代码对不对

接口说明书对应Swagger / Knife4j的卡通场景图

接口说明书

Swagger / Knife4j

告诉前端怎么调

接口试验台对应Postman / Apifox的卡通场景图

接口试验台

Postman / Apifox

手动测试接口

工作日记对应日志的卡通场景图

工作日记

日志

记录运行过程

类比映射表

采购员和打包员 Maven

管理依赖并打包项目

代码历史记录本 Git / SVN

记录谁在什么时候改了什么

小考卷 JUnit

验证代码是否符合预期

接口说明书和测试工具 Swagger / Knife4j / Postman / Apifox

说明和测试接口

工作日记 日志工具

记录请求、耗时、错误和关键行为

新手先记住

工程协作工具不是附属品,而是让多人开发可控、可回溯、可测试、可排错的基础设施。

讲给自己听

用“多人一起造玩具店”的类比讲一遍:Maven、Git、JUnit、接口文档工具、日志分别帮团队解决什么问题?

下一站:店铺能运行后,还要装门禁和保险柜,防止谁都能进、谁都能乱拿。
12 安全与权限体系

不能让谁都进,也不能让谁都乱拿东西

安全权限像门禁、通行证、角色胸牌、房间权限牌、监控和保险柜。

普通小朋友只能看自己的订单,店长能看所有订单,仓库管理员能改库存,游客不能进后台。登录是证明你是谁,认证是确认你真是这个人,权限是决定你能进哪个房间、按哪个按钮、看哪些资料。同时还要防 SQL 注入、XSS、CSRF、越权和密码明文保存。

关系一句话

用户先登录认证,拿到 Token/JWT,再根据角色、菜单、按钮和数据权限访问系统;同时要防常见攻击和越权。

关系图

不能让谁都进,也不能让谁都乱拿东西的模块关系图

Cartoon Scene

把类比里的角色画出来

先看场景图形成画面感,再回到技术名词,会比直接背定义更容易记住。

不能让谁都进,也不能让谁都乱拿东西的卡通场景图

实体场景图鉴

每个类比实体都有一张独立场景图,帮助你先记住角色和物件,再对应到技术名称。

门禁闸机对应登录 / 认证的卡通场景图

门禁闸机

登录 / 认证

先证明身份

通行证对应Token / JWT的卡通场景图

通行证

Token / JWT

临时进入凭证

角色胸牌对应角色的卡通场景图

角色胸牌

角色

普通用户/管理员

菜单牌对应菜单权限的卡通场景图

菜单牌

菜单权限

能看哪些页面

按钮开关对应按钮权限的卡通场景图

按钮开关

按钮权限

能不能点操作

数据文件柜对应数据权限的卡通场景图

数据文件柜

数据权限

能看哪些资料

保险柜对应加密存储的卡通场景图

保险柜

加密存储

密码不能明文

监控摄像头对应安全审计的卡通场景图

监控摄像头

安全审计

发现坏人和异常

类比映射表

先证明你是谁 登录

提交账号密码等凭证

确认你真是这个人 认证

校验身份真实性

临时通行证 Token / JWT

登录后访问系统的身份凭证

普通用户、管理员、老板胸牌 角色

粗粒度身份分组

能看哪些页面 菜单权限

控制导航和页面可见性

能不能点删除、审核、导出 按钮权限

控制具体操作

能看自己的数据还是全部数据 数据权限

控制数据范围

坏人把危险命令塞进查询里 SQL 注入

必须参数化查询和校验输入

坏脚本塞进页面 XSS

要转义和过滤不可信内容

假装你发请求 CSRF

要校验来源或 Token

新手先记住

安全权限的核心是:确认你是谁,决定你能做什么,限制你能看什么,并防止坏人绕过规则。

讲给自己听

用“玩具店门禁”的类比讲一遍:登录、认证、Token、角色、菜单权限、按钮权限、数据权限以及 SQL 注入/XSS/CSRF/越权分别是什么?

下一站:到这里,玩具店后端从找得到、跑得起、能办事、能扩展、能上线、能协作、能防护,已经形成完整地图。

最后用 3 分钟讲完整条后端链路

小朋友点按钮 → 浏览器通过 DNS、网络、端口和 HTTP 找到玩具店 → Java 员工用统一语言办事 → JDK/JVM 让 Java 跑起来 → Java Web 接收和返回纸条 → Spring 大管家组织员工 → Controller、Service、Mapper 分层办事 → MySQL 大仓库存重要资料 → Redis 小本子加速常用数据 → MQ、异步和定时任务处理慢事情 → 微服务把大店拆成部门 → 部署运维让它真正营业 → 工程工具支持多人协作 → 安全权限守住门禁和资料。