乐于分享
好东西不私藏

若依请求链路源码解析:一个 HTTP 请求在若依里经历了什么

若依请求链路源码解析:一个 HTTP 请求在若依里经历了什么

大家好,我是若依框架教程。
今天分享源码解析部分的最后一篇。
很多开发者刚接触 RuoYi 时都会有一个疑问:

浏览器发出一个 HTTP 请求,在若依项目里到底经历了什么?

如果你真的能把这个流程看懂,其实就已经掌握了:
Spring Boot 请求生命周期
Spring Security 认证体系
Token / JWT 登录逻辑
Controller → Service → Mapper 的完整调用链
这篇文章我们就把整个链路拆开,从源码角度一步一步走一遍。

一、先看整体链路

在若依里,一个 HTTP 请求的完整路径大致是:
浏览器请求TomcatFilter(过滤器)Spring SecurityInterceptor(拦截器)ControllerServiceMapperMyBatis数据库返回时再反向返回:数据库MyBatisMapperServiceController返回 JSON
如果用一句话总结:

若依的核心就是:Security 控制入口,Spring MVC 控制流程,MyBatis 控制数据。

下面我们按源码顺序走一遍。

二、请求进入 Spring Boot

当浏览器访问:GET /system/user/list,请求首先到达内嵌的Tomcat
在 Spring Boot 中:Tomcat → DispatcherServlet
核心入口类:org.springframework.web.servlet.DispatcherServlet
它是Spring MVC 的前端控制器
所有请求都会先到这里。

三、Filter阶段(最早拦截)

在到达 Spring Security 之前,请求会经过Servlet Filter
若依中常见的 Filter 包括:CorsFilter、XssFilter、RepeatableFilter
作用:
Filter
作用
CorsFilter
解决跨域
XssFilter
防止XSS攻击
RepeatableFilter
请求体可重复读取
例如:public class XssFilter implements Filter,会过滤掉危险脚本:

四、Spring Security 接管请求

接下来,请求进入:Spring Security
若依的安全核心配置在:SecurityConfig
里面会配置:
http.authorizeRequests().antMatchers("/login").permitAll().anyRequest().authenticated()
意思是:/login 不需要登录,其他接口必须登录。
所以:请求 → 判断是否需要认证

五、JWT Token 验证

若依使用:JSON Web Token
登录后会返回:token
请求时:Authorization: Bearer token
然后会进入:JwtAuthenticationTokenFilter
这个过滤器会做三件事:
第一步:解析 Token
tokenService.getLoginUser(request)
第二步:解析用户信息
Token 中包含:
{"userId":1,"username":"admin"}
第三步:写入 SecurityContext
SecurityContextHolder.getContext()
此时:当前用户 = 已登录

六、Spring MVC 选择 Controller

接下来进入:HandlerMapping
它会找到对应 Controller。
例如请求:/system/user/list,对应 Controller:SysUserController方法:
@GetMapping("/list")public TableDataInfo list(SysUser user)

七、AOP切面开始工作

在执行 Controller 方法之前,一些AOP增强会生效。
若依常见的 AOP 包括:
注解
作用
@Log
操作日志
@DataScope
数据权限
@PreAuthorize
权限控制
例如:
@PreAuthorize("@ss.hasPermi('system:user:list')")
这是:按钮权限控制。

八、Service层执行业务逻辑

Controller 一般不会写复杂逻辑。
它会调用:Service
例如:sysUserService.selectUserList(user)
Service 负责:业务逻辑、数据组合、事务控制。
例如:@Transactional

九、Mapper 层访问数据库

Service 会调用:Mapper
Mapper 是 MyBatis 接口:SysUserMapper
例如:List selectUserList(SysUser user);
对应 XML:
执行 SQL:select * from sys_user
此时:MyBatis 会把 SQL 发送到数据库。

十、MyBatis 结果映射

数据库返回:ResultSet
MyBatis 会把它映射为:SysUser 对象
然后返回:List
回到:Service → Controller

十一、返回前端 JSON

Controller 返回:return getDataTable(list);
这个方法会包装成:
{"code": 200,"rows": [],"total"100}
最终由:Jackson,序列化为 JSON。浏览器收到响应。

十二、完整源码链路总结

如果你在 IDEA 里按执行顺序跟踪,大致是:
HTTP RequestTomcatFilterSpring SecurityJwtAuthenticationTokenFilterDispatcherServletHandlerMappingControllerAOP(日志 / 数据权限)ServiceMapperMyBatisDatabase

十三、IDEA源码阅读路线(推荐)

如果你想真正读懂这条链路,可以按这个顺序看源码:
第一步:SysLoginController理解登录流程。
第二步:JwtAuthenticationTokenFilter理解 Token 认证。
第三步:SecurityConfig理解安全配置。
第四步:SysUserController理解接口结构。
第五步:DataScopeAspect理解数据权限。
第六步:SysUserMapper.xml理解 SQL 执行。
这样基本就把若依核心跑通了。

十四、一个真正的若依源码学习建议

如果你在做AI + 若依源码学习,其实可以这样用 AI:
在 IDE 插件里输入:解释这个类在若依请求链路中的作用,并标注它处于哪个阶段。
或者:这个方法在HTTP请求生命周期中的位置是什么?
AI 会帮你自动构建源码地图
这也是为什么现在很多人开始:用 AI 读源码,而不是自己一点点找。

结语

很多人觉得若依复杂,其实它只是把企业系统的常见模块组合在一起:Spring Boot、Spring Security、MyBatis、Vue,只要理解了HTTP 请求链路,你就掌握了整个框架的骨架。
后面再深入阅读:代码生成器、数据权限、操作日志、权限体系,整个若依就会彻底打通。
若依登录认证源码深度解析:Spring Security + JWT是怎么工作的
AI 时代的源码深度解析:若依(RuoYi)权限体系源码深度解析:RBAC是怎么落地的
AI 时代的源码深度解析:很多人会用若依(RuoYi)代码生成器,但很少有人真正懂它
AI 时代的若依开发:如何用 AI 辅助你快速理解项目架构与源码逻辑?
AI 时代的若依(RuoYi)开发:环境搭建 + 项目启动 + 报错排查,AI帮你丝滑搞定(含pormat及完整开发指南)