You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.5 KiB

Repository Guidelines

文档定位

本文件聚焦“写代码时需要的架构与模块提示信息”,不包含 Git 流程、编译或测试命令。

系统架构总览

  • 工程形态Maven 多模块单体应用,前后端分离(ruoyi-ui + Spring Boot 后端)。
  • 模块分层:
    • ruoyi-admin应用入口、Controller 暴露层。
    • ruoyi-framework安全认证、AOP、拦截器、数据权限与限流实现层。
    • ruoyi-system:系统业务域(用户/角色/菜单/字典等)服务层。
    • ruoyi-common:跨模块基础设施与通用契约层。
    • ruoyi-quartz:任务调度能力层。
    • ruoyi-generator:代码生成能力层。
  • 关键依赖方向:admin -> framework -> system -> commonquartz/generator -> common

Backend Tech Stack (With Versions)

版本来源:根 pom.xmlpropertiesdependencyManagement

技术 版本 说明
Java 17 语言与运行时基线
Spring Boot BOM 3.5.8 Spring 生态版本管理
MyBatis Spring Boot Starter 3.0.5 ORM/Mapper
Druid Spring Boot 3 Starter 1.2.27 数据源与连接池
PageHelper Starter 2.1.1 分页
MySQL Connector/J 8.2.0 MySQL 驱动
SpringDoc OpenAPI 2.8.14 API 文档
Spring Security 由 Boot 3.5.8 管理 认证鉴权
Spring Data Redis 由 Boot 3.5.8 管理 缓存/会话
JJWT 0.9.1 JWT
Quartz 2.5.2 定时任务
Fastjson2 2.0.60 JSON
Apache POI 4.1.2 Excel 导入导出
Velocity 2.3 代码生成模板
Kaptcha 2.3.3 验证码
YAUAA 7.32.0 User-Agent 解析
OSHI 6.9.1 主机监控信息
Commons IO 2.21.0 IO 工具
Jakarta Servlet API 6.0.0 Servlet 规范

ruoyi-common 模块深度分析

模块定位与边界

  • ruoyi-common 是后端基础设施层,提供统一契约、基类、工具和安全过滤,不承载业务流程。
  • 当前约 109 个 Java 类,属于项目复用中心模块。

包结构概览(一级包)

  • utils36通用工具主集合。
  • core22Controller/Domain/Page/Redis/Text 基础抽象。
  • exception18统一异常体系。
  • annotation9横切能力注解契约。
  • constant6/enums8常量与策略枚举。
  • filter6/xss2请求过滤与输入安全。
  • config2通用配置与序列化器。

架构中心性(跨模块复用)

  • ruoyi-framework: 148 次 import com.ruoyi.common.*
  • ruoyi-admin: 138 次
  • ruoyi-system: 86 次
  • ruoyi-quartz: 40 次
  • ruoyi-generator: 25 次
  • 高频类:StringUtilsAjaxResultConstantsBaseControllerSecurityUtilsExcelUtil

设计机制(写代码时重点)

  • 契约与实现分离:@DataScope/@RateLimiter/@RepeatSubmit/@Log 定义在 common实现放在 framework 的 Aspect/Interceptor。
  • 统一返回规范Controller 继承 BaseController,统一输出 AjaxResult/TableDataInfo
  • 统一实体扩展位:BaseEntity.params 用于数据权限 SQL 片段等横切参数传递。
  • 统一安全输入链路:SqlUtilXssFilterXssValidatorRepeatableFilter 负责请求与参数安全治理。

ruoyi-common 类级别索引清单(按包)

annotation

使用场景
Anonymous 标记匿名可访问接口
DataScope 服务查询方法注入数据权限条件
DataSource 动态切换主从数据源
Excel/Excels 实体字段导入导出映射
Log 业务操作日志切面采集
RateLimiter 接口限流(全局或按 IP
RepeatSubmit 防重复提交
Sensitive 返回字段脱敏

config

使用场景
RuoYiConfig 读取 ruoyi.* 业务基础配置(上传路径、验证码类型等)
SensitiveJsonSerializer 配合 @Sensitive 做序列化脱敏

constant

使用场景
Constants 全局常量JWT 字段、权限标识、资源前缀等)
CacheConstants Redis key 前缀统一管理
HttpStatus 返回状态码常量
GenConstants 代码生成器常量
ScheduleConstants 调度任务常量
UserConstants 用户/角色状态常量

core.controller

使用场景
BaseController 分页、排序、安全用户获取、统一响应快捷方法

core.domain

使用场景
AjaxResult 标准接口返回体Map 风格)
R<T> 泛型响应体(类型化返回)
BaseEntity 审计字段与 params 扩展参数
TreeEntity/TreeSelect 树结构实体与前端下拉树数据

core.domain.entity

使用场景
SysUser 用户领域共享实体含校验、Excel 注解)
SysRole 角色与数据权限范围
SysDept 部门树领域实体
SysMenu 菜单与权限节点
SysDictType/SysDictData 字典类型与字典项

core.domain.model

使用场景
LoginBody 登录请求体
RegisterBody 注册请求体
LoginUser 安全上下文主体token、权限、登录态

core.page

使用场景
PageDomain 分页参数承载
TableSupport 从请求提取分页参数
TableDataInfo 表格分页响应结构

core.redis

使用场景
RedisCache RedisTemplate 的统一封装(对象/列表/集合/Map/过期)

core.text

使用场景
Convert 安全类型转换
StrFormatter {} 占位符格式化
CharsetKit 字符集处理

enums

使用场景
BusinessType/OperatorType 操作日志分类
DataSourceType 主从数据源策略
LimitType 限流维度(默认/IP
HttpMethod 请求方法匹配
UserStatus/BusinessStatus 状态语义统一
DesensitizedType 脱敏策略函数集合

exception

使用场景
BaseException 业务基础异常(支持国际化 code
ServiceException 服务层运行时异常(可带状态码)
UtilException 工具类异常
DemoModeException/GlobalException 演示模式与全局业务异常
file.* 文件上传、大小、扩展名异常
user.* 登录、验证码、密码重试、黑名单异常
job.TaskException 定时任务执行异常

filter

使用场景
RepeatableFilter/RepeatedlyRequestWrapper JSON 请求体可重复读取
XssFilter/XssHttpServletRequestWrapper 请求参数与 JSON 体 XSS 清洗
RefererFilter 防盗链 Referer 校验
PropertyPreExcludeFilter JSON 属性排除辅助

utils(重点工具类补充)

使用场景
StringUtils 字符串/集合空判断、模板格式化、命名转换
DateUtils 日期解析与格式化
SecurityUtils 获取当前用户、权限匹配、密码加密
ServletUtils request/response/session 获取与渲染
PageUtils 分页启动与清理
DictUtils 字典缓存读写与标签值转换
FileUploadUtils 统一上传路径、命名、扩展名校验
FileUtils/ImageUtils/MimeTypeUtils 文件读写、图片处理、类型识别
ExcelUtil Excel 导入导出核心工具
SqlUtil orderBy 白名单校验与关键字过滤
IpUtils/AddressUtils IP 解析与归属地查询
HttpUtils/HttpHelper/UserAgentUtils HTTP 调用、请求体读取、UA 解析
SpringUtils 非托管代码获取 Bean/环境信息
BeanUtils/BeanValidators/ReflectUtils Bean 复制、校验、反射访问
IdUtils/UUID/Seq 唯一 ID 与序列号
Md5Utils/Base64 摘要与编码

xss

使用场景
Xss 字段级 XSS 校验注解
XssValidator XSS 校验实现

写代码时的实用提示(聚焦 common

  • 返回值统一:优先使用 AjaxResult/TableDataInfo,避免模块间返回结构不一致。
  • 分页与排序安全:动态排序字段必须走 SqlUtil.escapeOrderBySql 逻辑。
  • Redis key 必须使用 CacheConstants 前缀,避免不同模块 key 冲突。
  • 上传逻辑优先复用 FileUploadUtils,不要在业务层重复拼接文件路径。
  • 涉及脱敏字段优先用 @Sensitive,不要在 Controller 手工字符串处理。
  • 新增通用能力时,先判断是否应放在 ruoyi-common(跨模块复用)还是业务模块(仅单域使用)。