Files
springboot-template/README.md
shenjianZ 3a9bf61839 feat: 初始化 Spring Boot 项目模板,搭建完整的用户认证与管理系统
- 新增项目基础配置:pom.xml 依赖管理、多环境配置(dev/prod)、Dockerfile、.env.example
  - 新增安全认证模块:JWT 工具类、JWT 过滤器、Spring Security 配置、自定义 UserDetails
  - 新增用户管理功能:注册/登录/查询/修改、角色管理(USER/ADMIN/ROOT)、分页查询、状态启禁用
  - 新增密码重置功能:邮箱验证码发送、验证码校验重置、频率限制与过期机制
  - 新增基础架构层:统一响应体 RestBean、全局异常处理、日志拦截器、Redis 工具类、JPA 配置
  - 新增 Swagger/OpenAPI 文档配置与完整的 API 接口文档(API_DOCUMENT.md)
  - 新增数据库初始化 SQL 脚本(init.sql)
2026-03-31 08:54:06 +08:00

160 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Spring Boot Template
基于 Spring Boot 3.5 的通用后端模板项目,开箱即用的认证体系和基础设施,快速启动新业务项目。
## 内置功能
| 模块 | 说明 |
|------|------|
| **JWT 认证** | 注册、登录、Token 验证 |
| **用户管理** | 用户 CRUD、角色USER/ADMIN、状态管理 |
| **密码找回** | 邮箱验证码方式重置密码 |
| **Spring Security** | 方法级权限控制、CORS、路由权限 |
| **Redis** | 完整的工具类String/Hash/List/Set/ZSet/Bitmap/HyperLogLog |
| **全局异常处理** | 统一响应格式、参数校验、业务异常、系统异常 |
| **JPA 审计** | 自动填充 createdAt / updatedAt |
| **日志拦截** | 请求 ID、用户信息、耗时统计 |
| **Swagger UI** | 在线 API 文档 + 调试Bearer Token 认证) |
| **多环境配置** | dev / prod 配置分离,支持 .env 环境变量 |
## 技术栈
- Java 17 + Spring Boot 3.5.6
- Spring Data JPA + MySQL
- Spring Data Redis + Lettuce
- Spring Security + JWT (jjwt)
- Springdoc OpenAPI (Swagger)
- Lombok
- Maven
## 快速开始
### 1. 环境准备
- JDK 17+
- MySQL 8.0+
- Redis 6.0+
- Maven 3.9+
### 2. 克隆并配置
```bash
# 复制项目
cp -r springboot-template your-project
cd your-project
# 修改包名(按需)
# com.aisi.template -> com.yourcompany.project
# 配置环境变量
cp .env.example .env
# 编辑 .env填入实际的数据库密码、JWT 密钥等
```
### 3. 初始化数据库
```sql
CREATE DATABASE IF NOT EXISTS template DEFAULT CHARSET utf8mb4;
```
执行 `src/main/resources/sql/init.sql`,或依赖 JPA `ddl-auto: update` 自动建表。
### 4. 启动
```bash
mvn spring-boot:run
```
启动后访问:
- Swagger UI: http://localhost:8080/swagger-ui/index.html
- OpenAPI JSON: http://localhost:8080/v3/api-docs
## 项目结构
```
src/main/java/com/aisi/template/
├── TemplateApplication.java # 入口
├── config/
│ ├── SecurityConfig.java # Security + CORS + JWT 过滤器
│ ├── JacksonConfig.java # JSON 日期格式
│ ├── JpaConfig.java # JPA 审计
│ ├── RedisConfig.java # Redis 序列化配置
│ ├── WebConfig.java # 日志拦截器注册
│ └── OpenApiConfig.java # Swagger Bearer Token
├── controller/
│ └── UserController.java # 用户相关接口
├── domain/
│ ├── RestBean.java # 统一响应包装
│ ├── RestCode.java # 响应状态码
│ ├── CustomUserDetails.java # Spring Security UserDetails
│ ├── dto/ # 请求 DTO
│ ├── vo/ # 响应 VO
│ ├── entity/ # JPA 实体
│ └── enums/ # 枚举Role, ErrorCode
├── exception/
│ └── BusinessException.java # 业务异常
├── filter/
│ └── JwtAuthenticationFilter.java # JWT 认证过滤器
├── handler/
│ └── GlobalExceptionHandler.java # 全局异常处理
├── interceptor/
│ └── LoggingInterceptor.java # 请求日志
├── repository/ # Spring Data JPA 仓库
├── service/ # 业务接口 + 实现
│ └── impl/
└── utils/
├── JwtUtil.java # JWT 工具
├── SecurityUtils.java # 安全上下文工具
└── RedisUtils.java # Redis 工具(全数据类型)
```
## 配置说明
通过 `.env` 文件或环境变量配置,关键配置项:
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `DB_HOST` | localhost | MySQL 地址 |
| `DB_PORT` | 3306 | MySQL 端口 |
| `DB_NAME` | template | 数据库名 |
| `DB_USER` | root | 数据库用户 |
| `DB_PASS` | root | 数据库密码 |
| `REDIS_HOST` | localhost | Redis 地址 |
| `REDIS_PORT` | 6379 | Redis 端口 |
| `REDIS_PASSWORD` | 空 | Redis 密码 |
| `JWT_SECRET` | (内置默认值) | JWT 签名密钥,**生产环境必须替换** |
| `MAIL_HOST` | smtp.163.com | 邮件 SMTP 地址 |
| `MAIL_USERNAME` | 空 | 邮件账号 |
| `MAIL_PASSWORD` | 空 | 邮件授权码 |
## Docker 部署
```bash
# 构建镜像
docker build -t springboot-template .
# 运行
docker run -d -p 8080:8080 \
-e DB_HOST=host.docker.internal \
-e REDIS_HOST=host.docker.internal \
-e JWT_SECRET=your_production_secret_at_least_64_chars_long \
springboot-template
```
## 使用模板创建新项目
1. 复制整个项目目录
2. 全局替换 `com.aisi.template` 为你的包名
3. 修改 `pom.xml` 中的 `artifactId``name``description`
4. 修改 `application.yaml` 中的 `spring.application.name`
5. 删除不需要的 Controller/Service添加你的业务代码
6.`ErrorCode` 枚举中添加业务错误码(预留了 2000-2999 范围)
## API 文档
详见 [API_DOCUMENT.md](API_DOCUMENT.md)
## License
Apache License 2.0