若依请求链路源码解析:一个 HTTP 请求在若依里经历了什么
浏览器发出一个 HTTP 请求,在若依项目里到底经历了什么?
Controller → Service → Mapper 的完整调用链
这篇文章我们就把整个链路拆开,从源码角度一步一步走一遍。
一、先看整体链路
浏览器请求↓Tomcat↓Filter(过滤器)↓Spring Security↓Interceptor(拦截器)↓Controller↓Service↓Mapper↓MyBatis↓数据库返回时再反向返回:数据库↑MyBatis↑Mapper↑Service↑Controller↑返回 JSON
若依的核心就是:Security 控制入口,Spring MVC 控制流程,MyBatis 控制数据。
二、请求进入 Spring Boot
当浏览器访问:GET /system/user/list,请求首先到达内嵌的Tomcat。
在 Spring Boot 中:Tomcat → DispatcherServlet
核心入口类:org.springframework.web.servlet.DispatcherServlet
三、Filter阶段(最早拦截)
在到达 Spring Security 之前,请求会经过Servlet Filter。
若依中常见的 Filter 包括:CorsFilter、XssFilter、RepeatableFilter
例如:public class XssFilter implements Filter,会过滤掉危险脚本:
四、Spring Security 接管请求
若依的安全核心配置在:SecurityConfig
http.authorizeRequests().antMatchers("/login").permitAll().anyRequest().authenticated()
意思是:/login 不需要登录,其他接口必须登录。
五、JWT Token 验证
请求时:Authorization: Bearer token
然后会进入:JwtAuthenticationTokenFilter
tokenService.getLoginUser(request)
{"userId":1,"username":"admin"}
SecurityContextHolder.getContext()
六、Spring MVC 选择 Controller
例如请求:/system/user/list,对应 Controller:SysUserController方法:
@GetMapping("/list")public TableDataInfo list(SysUser user)
七、AOP切面开始工作
在执行 Controller 方法之前,一些AOP增强会生效。
@PreAuthorize("@ss.hasPermi('system:user:list')")
八、Service层执行业务逻辑
例如:sysUserService.selectUserList(user)
Service 负责:业务逻辑、数据组合、事务控制。
九、Mapper 层访问数据库
Mapper 是 MyBatis 接口:SysUserMapper
例如:List selectUserList(SysUser user);
执行 SQL:select * from sys_user
此时:MyBatis 会把 SQL 发送到数据库。
十、MyBatis 结果映射
MyBatis 会把它映射为:SysUser 对象
十一、返回前端 JSON
Controller 返回:return getDataTable(list);
{"code": 200,"rows": [],"total": 100}
最终由:Jackson,序列化为 JSON。浏览器收到响应。
十二、完整源码链路总结
HTTP Request↓Tomcat↓Filter↓Spring Security↓JwtAuthenticationTokenFilter↓DispatcherServlet↓HandlerMapping↓Controller↓AOP(日志 / 数据权限)↓Service↓Mapper↓MyBatis↓Database
十三、IDEA源码阅读路线(推荐)
第一步:SysLoginController理解登录流程。
第二步:JwtAuthenticationTokenFilter理解 Token 认证。
第三步:SecurityConfig理解安全配置。
第四步:SysUserController理解接口结构。
第五步:DataScopeAspect理解数据权限。
第六步:SysUserMapper.xml理解 SQL 执行。
十四、一个真正的若依源码学习建议
如果你在做AI + 若依源码学习,其实可以这样用 AI:
在 IDE 插件里输入:解释这个类在若依请求链路中的作用,并标注它处于哪个阶段。
或者:这个方法在HTTP请求生命周期中的位置是什么?
这也是为什么现在很多人开始:用 AI 读源码,而不是自己一点点找。
结语
很多人觉得若依复杂,其实它只是把企业系统的常见模块组合在一起:Spring Boot、Spring Security、MyBatis、Vue,只要理解了HTTP 请求链路,你就掌握了整个框架的骨架。
后面再深入阅读:代码生成器、数据权限、操作日志、权限体系,整个若依就会彻底打通。