若依(RuoYi)结构代码分析(一)、总览

文章正文
发布时间:2025-05-13 10:30

若依(RuoYi)是一款基于Spring Boot的权限管理系统,其代码结构清晰、模块化程度高,适合学习企业级项目开发。以下是对若依管理台后端工程的核心模块和代码结构的讲解:

一、项目结构概览 ruoyi-admin // 启动模块(主工程) ruoyi-common // 公共模块(工具类、通用组件) ruoyi-system // 系统模块(核心业务:用户、角色、菜单等) ruoyi-framework // 框架模块(核心配置、权限控制) ruoyi-generator // 代码生成模块 二、核心技术栈

核心框架:Spring Boot + MyBatis + Spring Security

权限控制:基于角色的访问控制(RBAC)、接口级权限注解

数据库:MySQL + Redis(缓存、会话管理)

工具类:Hutool工具库、Jackson序列化

其他:Swagger(API文档)、Quartz(定时任务)

三、核心模块详解 1. 权限控制(Spring Security)

认证流程

用户登录 → LoginService.login() → 生成Token(JWT或Redis Session)

请求拦截 → JwtAuthenticationTokenFilter → 验证Token并注入用户信息

权限注解:@PreAuthorize("@ss.hasPermi('system:user:list')") // 接口权限校验 public R list(...) { ... }

权限校验逻辑

PermissionService 根据用户角色动态加载权限数据

权限数据缓存到Redis,避免频繁查询数据库

2. 系统管理模块(ruoyi-system)

核心实体

SysUser(用户)、SysRole(角色)、SysMenu(菜单)

数据库表关系

用户 ↔ 角色(多对多,sys_user_role表)

角色 ↔ 菜单(多对多,sys_role_menu表)

关键代码

SysUserController:用户管理接口(增删改查)

SysRoleService:角色权限分配逻辑

SysMenuServiceImpl.buildMenuTree():递归构建菜单树

3. 代码生成器(ruoyi-generator)

作用:通过数据库表自动生成Controller、Service、Mapper代码

核心类

GenTable:表信息模型

VelocityInitializer:模板引擎生成代码

配置文件

generator.yml:配置包路径、作者信息等

4. 通用工具类(ruoyi-common)

常用工具

SecurityUtils:获取当前登录用户

ServletUtils:处理HTTP请求响应

StringUtils:字符串处理

ExcelUtil:POI封装导出Excel

四、核心配置解析

全局配置:application.yml(数据源、Redis、Swagger开关)

安全配置:SecurityConfig(放行路径、密码加密方式)

MyBatis配置:MyBatisConfig(分页插件、事务管理)

跨域配置:CorsConfig(全局跨域处理)

五、代码特点

分层清晰:Controller → Service → Mapper

注解驱动:@DataScope(数据权限过滤)、@Log(操作日志)

动态SQL:使用MyBatis动态标签(如<if>、<foreach>)

缓存优化:高频数据(如菜单、字典)缓存到Redis

异常处理:全局异常处理器GlobalExceptionHandler

六、学习建议

从登录流程切入:跟踪LoginController → AuthenticationManager → UserDetailsService

调试权限注解:修改@PreAuthorize观察接口拦截效果

扩展新模块:通过代码生成器创建新表,生成CRUD代码

定制数据权限:参考@DataScope实现部门数据过滤

学习前端交互:结合若依前端代码(Vue)理解接口调用

示例:用户登录流程

// 登录入口 @PostMapping("/login") public R login(@RequestBody LoginBody loginBody) { String token = loginService.login(loginBody.getUsername(), loginBody.getPassword()); return R.ok().put("token", token); } // 实际认证逻辑(LoginService) public String login(String username, String password) { // 1. 用户验证 Authentication authentication = authenticationManager.authenticate(...); // 2. 生成Token return tokenService.createToken(loginUser); }

首页
评论
分享
Top