这是一个基于 Spring Boot 的企业级后台管理系统标准规范模板,采用 JWT 双令牌机制,集成主流技术栈,遵循阿里巴巴 Java 开发手册规范,为企业级应用开发提供稳定、高效、可扩展的基础框架。
- ✨ 标准规范架构:采用经典三层架构,代码结构清晰,易于维护
- 🔐 JWT 双令牌认证:访问令牌 + 刷新令牌,安全性与用户体验并重
- 🔒 RSA+AES 混合加密:前后端数据传输全程加密,保障数据安全
- 📝 AOP 日志记录:基于注解的业务操作日志,支持FastJSON2序列化
- 🚀 主流技术栈:集成 Spring Boot、MyBatis Plus、Redis、JWT 等热门技术
- 🛡️ 完善安全机制:登录拦截器、用户上下文管理、令牌自动刷新
- 📖 详细代码注释:每个模块都有完善的注释,降低学习成本
- 🔧 开箱即用:提供完整的用户认证和授权功能
- 📏 开发规范:遵循阿里巴巴 Java 开发手册,保证代码质量
- 🔒 配置安全:敏感配置文件不入库,支持JKS密钥存储
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 2.7.18 | 基础开发框架,LTS 长期支持版本 |
| Spring Web | 2.7.18 | Web 开发和 RESTful API |
| Spring AOP | 2.7.18 | 面向切面编程,用于日志记录等 |
| MyBatis Plus | 3.5.3 | 持久层框架,简化 CRUD 操作 |
| MySQL | 8.0.32 | 关系型数据库 |
| Redis | Latest | 缓存和会话存储 |
| JJWT | 0.11.5 | JWT 令牌生成和验证 |
| FastJSON2 | 2.0.48 | 高性能 JSON 处理库,用于日志序列化 |
| Hutool | 5.8.22 | Java 工具类库 |
| Lombok | Latest | 简化 Java 代码编写 |
| CryptoJS | Latest | 前端加密解密库(前端依赖) |
| 工具 | 版本要求 | 说明 |
|---|---|---|
| JDK | 11+ | Java 开发环境 |
| Maven | 3.6+ | 项目构建工具 |
| IntelliJ IDEA | 2020.3+ | 推荐开发工具 |
| MySQL | 8.0+ | 数据库服务 |
| Redis | 6.0+ | 缓存服务 |
springboot_admin_template/
├── src/main/java/com/zzy/admin/
│ ├── App.java # 启动类(含个性化Banner)
│ ├── annotation/ # 自定义注解
│ │ ├── LogRecord.java # 日志记录注解
│ │ └── AnonymousAccess.java # 匿名访问注解
│ ├── aspect/ # 切面类
│ │ └── LogRecordAspect.java # 日志记录切面
│ ├── common/ # 通用模块
│ │ ├── Result.java # 统一响应结果封装
│ │ ├── ResultCode.java # 响应状态码枚举
│ │ ├── UserContext.java # 用户上下文对象
│ │ ├── UserContextHolder.java # 用户上下文管理器
│ │ └── constant/ # 常量定义
│ │ └── RedisConstant.java # Redis常量
│ ├── controller/ # 控制层
│ │ ├── UserController.java # 用户控制器
│ │ └── AuthController.java # 认证控制器(公钥等)
│ ├── service/ # 服务层
│ │ ├── SysUserService.java # 用户服务接口
│ │ └── impl/ # 服务实现
│ │ └── SysUserServiceImpl.java # 用户服务实现
│ ├── mapper/ # 数据访问层
│ │ └── SysUserMapper.java # 用户数据访问
│ ├── domain/ # 领域模型
│ │ ├── po/ # 持久化对象
│ │ │ ├── SysUser.java # 用户实体
│ │ │ └── OperationLog.java # 操作日志实体
│ │ ├── vo/ # 视图对象
│ │ │ └── UserVO.java # 用户视图对象
│ │ └── dto/ # 数据传输对象
│ │ └── RefreshRequest.java # 刷新令牌请求
│ ├── utils/ # 工具类
│ │ ├── JwtUtil.java # JWT 工具类
│ │ ├── CryptoUtils.java # 加密解密工具类
│ │ └── LogUtils.java # 日志工具类
│ ├── interceptor/ # 拦截器
│ │ └── LoginInterceptor.java # 登录拦截器
│ ├── config/ # 配置类
│ │ ├── WebMvcConfig.java # Web MVC 配置
│ │ ├── JwtProperties.java # JWT属性配置
│ │ └── RedisConfig.java # Redis配置
│ └── exception/ # 异常处理
│ ├── AuthException.java # 认证异常
│ ├── BaseException.java # 基础异常类
│ ├── BusinessException.java # 业务异常
│ ├── GlobalExceptionHandler.java # 全局异常处理器
│ ├── ParamException.java # 参数异常
│ └── PermissionDeniedException.java # 权限拒绝异常
├── src/main/resources/
│ ├── application-example.yml # 配置模板文件
│ ├── application.yml # 应用配置文件(不入库)
│ ├── zzy.jks # JKS密钥存储文件
│ └── mapper/ # MyBatis映射文件
│ └── SysUserMapper.xml # 用户数据访问映射
├── pom.xml # Maven 依赖配置
├── .gitignore # Git 忽略文件配置
└── README.md # 项目说明文档
登录成功 → 返回访问令牌(1小时) + 刷新令牌(7天)
↓
用户携带访问令牌访问接口
↓
访问令牌过期 → 前端自动用刷新令牌换取新的访问令牌
↓
继续正常使用系统
↓
刷新令牌过期 → 用户重新登录
前端流程:
1. 获取服务器RSA公钥
2. 生成随机AES密钥和IV
3. 使用AES加密敏感数据(如密码)
4. 使用RSA公钥加密AES密钥
5. 发送加密数据到服务器
后端流程:
1. 从JKS文件加载RSA私钥
2. 使用RSA私钥解密AES密钥
3. 使用AES密钥和IV解密数据
4. 处理业务逻辑
- 访问令牌:短期有效(默认1小时),用于日常API访问
- 刷新令牌:长期有效(默认7天),仅用于获取新的访问令牌
- 令牌存储:刷新令牌存储在Redis中,支持强制下线
- 自动续期:访问令牌快过期时自动刷新,用户无感知
- 安全拦截:全局登录拦截器,自动验证和设置用户上下文
- 数据加密:敏感数据传输采用RSA+AES混合加密
- 密钥管理:使用JKS文件安全存储密钥对
- 基于AOP:使用
@LogRecord注解标记需要记录的方法 - 智能序列化:使用FastJSON2进行参数和结果序列化
- 过滤机制:自动过滤不可序列化对象和敏感信息
- 性能优化:支持异步日志记录,不影响业务性能
- JDK 1.8兼容:完全兼容JDK 1.8环境
@PostMapping("/login")
@LogRecord(value = "用户登录", businessType = "认证")
public Result<?> login(@RequestBody SysUser sysUser) {
return sysUserService.login(sysUser);
}2025-07-05 10:48:27 [http-nio-8070-exec-1] INFO c.z.a.aspect.LogRecordAspect -
=== 操作完成 === | 操作: 用户登录 | 状态: SUCCESS | 执行时间: 1139ms | 操作人: admin | 结果: {...}
确保您的开发环境已安装以下软件:
- JDK 11 或更高版本
- Maven 3.6 或更高版本
- MySQL 8.0 或更高版本
- Redis 6.0 或更高版本
git clone https://github.com/zxyang3636/springboot_admin_template.git
cd springboot_admin_template# 方式一:使用 Maven
mvn spring-boot:run
# 方式二:使用 IDE
直接运行 com.zzy.admin.App 类
# 方式三:打包后运行
mvn clean package
java -jar target/springboot_admin_template-1.0-SNAPSHOT.jar- 获取公钥:调用获取公钥接口,用于加密传输
- 加密登录:使用混合加密方式安全传输登录信息
- 获取令牌:登录成功后获取访问令牌和刷新令牌
- 访问受保护接口:请求头携带
Authorization: Bearer <accessToken> - 令牌自动刷新:访问令牌过期时,前端自动调用刷新接口
- 退出登录:清理服务器端的令牌信息
- 配置模板:
application-example.yml提供配置示例,可安全提交到Git - 实际配置:
application.yml包含敏感信息,已加入.gitignore,不会提交到Git - 密钥管理:使用JKS文件存储RSA密钥对,支持密码保护
- 快速配置:新环境部署时,复制模板文件并修改相应配置即可
-
阿里巴巴 Java 开发手册
- 命名规范:类名使用 UpperCamelCase,方法名使用 lowerCamelCase
- 包名全部小写,连续的单词直接拼接,不使用下划线
- 常量名全部大写,单词间用下划线分隔
-
分层架构规范
Controller 层:负责接收请求参数,调用 Service 处理业务,返回结果 Service 层: 负责业务逻辑处理,事务控制 Mapper 层: 负责数据访问,与数据库交互 -
异常处理规范
- 统一使用
Result<T>封装响应结果 - 业务异常继承
BaseException - 全局异常处理器统一处理异常
- 统一使用
-
日志记录规范
- 使用
@LogRecord注解记录业务操作 - 重要业务操作必须记录日志
- 敏感信息自动过滤,避免泄露
- 使用
{
"code": 200,
"message": "操作成功",
"data": {},
"success": true,
"fail": false,
"timestamp": 1735123456789
}| 状态码 | 说明 |
|---|---|
| 200 | 操作成功 |
| 400 | 参数错误 |
| 401 | 未认证 |
| 403 | 权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
mvn spring-boot:run- 打包应用
mvn clean package -Dmaven.test.skip=true- 运行应用
java -jar -Dspring.profiles.active=prod target/springboot_admin_template-1.0-SNAPSHOT.jar- Docker 部署
FROM openjdk:11-jre-slim
COPY target/springboot_admin_template-1.0-SNAPSHOT.jar app.jar
COPY src/main/resources/zzy.jks /app/zzy.jks
EXPOSE 8070
ENTRYPOINT ["java", "-jar", "/app.jar"]-
密钥管理:
- 生产环境使用独立的JKS文件
- 定期轮换密钥对
- 严格控制密钥文件访问权限
-
配置安全:
- 不要在代码中硬编码敏感信息
- 使用环境变量或外部配置管理敏感配置
- 启用HTTPS确保传输安全
-
监控告警:
- 监控异常登录行为
- 记录关键操作日志
- 设置安全告警机制
-
启动失败
- 检查配置文件是否正确
- 确认数据库和Redis连接正常
- 查看启动日志定位具体错误
- 检查JKS文件是否存在且密码正确
-
登录失败
- 检查用户密码是否正确
- 确认用户状态是否为启用状态
- 查看数据库用户表数据
- 检查加密解密流程是否正确
-
令牌验证失败
- 检查JWT密钥配置
- 确认令牌格式是否正确
- 查看令牌是否过期
- 检查请求头格式
-
加密解密错误
- 确认前后端加密算法一致
- 检查IV长度是否为16字节
- 验证密钥格式是否正确
- 查看序列化配置
-
日志记录异常
- 检查切面是否生效
- 确认方法可见性(public)
- 查看FastJSON2依赖
- 验证过滤配置
-
Redis连接失败
- 检查Redis服务是否启动
- 确认连接配置是否正确
- 查看网络连接状态
- 用户信息缓存:Redis存储用户基础信息,减少数据库查询
- 令牌缓存:利用Redis的过期机制管理令牌生命周期
- 公钥缓存:RSA公钥缓存到内存,避免重复生成
- 日志异步写入:使用异步方式记录操作日志,提高响应速度
- 令牌异步刷新:后台异步处理令牌刷新逻辑
- 连接池配置:合理配置数据库连接池参数
- 索引优化:为频繁查询字段添加索引
- 分页查询:大数据量查询使用分页避免内存溢出
- Fork 本项目
- 创建特性分支:
git checkout -b feature/new-feature - 提交更改:
git commit -am 'Add some feature' - 推送分支:
git push origin feature/new-feature - 提交 Pull Request
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
- 🔒 新增 RSA+AES 混合加密:前后端数据传输全程加密,保障敏感信息安全
- 📝 新增 AOP 日志记录系统:基于
@LogRecord注解的业务操作日志,支持FastJSON2序列化 - 🔑 新增 JKS 密钥存储:使用Java KeyStore安全存储RSA密钥对,支持密码保护
- 🛡️ 拦截器优化升级:支持注解配置、配置文件、路径约定三种白名单模式
- ⚡ 序列化引擎升级:从Jackson迁移到FastJSON2,提升性能并解决序列化兼容性问题
- 🔧 加密工具类完善:提供完整的前后端加密解密工具类和使用示例
- 📊 操作日志数据模型:新增OperationLog实体和数据表,支持操作审计
- 🚀 智能参数过滤:自动过滤不可序列化对象和敏感信息,提升日志安全性
- 🔐 新增 JWT 双令牌认证机制:访问令牌 + 刷新令牌,提升安全性和用户体验
- 👤 新增用户上下文管理:UserContext 和 UserContextHolder,简化用户信息获取
- 🛡️ 新增登录拦截器:自动验证令牌和设置用户上下文
- 🔄 新增令牌刷新机制:支持自动刷新访问令牌,用户无感知续期
- 🚪 完善退出登录:支持令牌过期时也能正常退出登录
- 🔒 配置文件安全管理:敏感配置不入库,提供配置模板
- 📚 完善API接口:登录、获取用户信息、刷新令牌、退出登录
- 🧪 支持令牌调试:可配置短期过期时间便于测试
- ✨ 初始化项目模板
- 🎯 集成 Spring Boot 2.7.18
- 📦 集成 MyBatis Plus
- 🛡️ 完善异常处理机制
- 📋 建立项目开发规范
💡 如果这个项目对您有帮助,请给个 ⭐ Star 支持一下!