youlai-boot Java 后端
项目简介
youlai-boot 是基于 Spring Boot 3、Spring Security 6、JWT、MyBatis-Plus 构建的现代化 Java 后端服务,为 Vue3 Element Admin 提供完整的后端支持。
项目特色
🚀 技术先进
- Spring Boot 3.x:最新的 Spring Boot 版本
- JDK 17+:使用最新的 Java 长期支持版本
- Spring Security 6:现代化的安全框架
- MyBatis-Plus:优雅的 ORM 框架
🔐 安全可靠
- 双模安全体系:支持 JWT 无状态令牌和 Redis-Token 有状态会话
- RBAC 权限模型:基于角色的访问控制
- 接口权限:基于 Spring Security 的方法级别权限控制
- 数据权限:基于用户角色的数据过滤
- 防重提交:防止接口重复提交
- IP 限流:防止恶意请求
- 多端互斥:支持 PC/APP 多端登录互斥策略
📖 文档完善
- Knife4j 文档:自动生成接口文档
- Swagger 支持:支持 Swagger UI 在线调试
- 参数校验:完善的参数验证机制
⚡ 开发效率
- 代码生成器:30 秒快速构建基础业务模块(前后端代码)
- MyBatis-Plus:减少 80% 的 SQL 编写
- 热部署:开发环境自动重启
- Lombok:简化 Java 代码
🔄 实时通信
- WebSocket 支持:实时消息推送
- 在线用户统计:实时监控在线用户
- 消息即时推送:系统消息实时通知
- 地理位置追踪:实时位置信息
⏰ 定时任务
- XXL-Job:分布式任务调度
- 任务分片:支持任务分片执行
- 失败告警:任务执行失败自动告警
- 动态配置:在线配置和管理定时任务
技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.3+ | 核心框架 |
| Spring Security | 6.3+ | 安全框架 |
| MyBatis-Plus | 3.5+ | ORM 框架 |
| MySQL | 8.0+ | 数据库 |
| Redis | 7.0+ | 缓存 & 会话 |
| JWT | 0.12+ | 令牌认证 |
| XXL-Job | 2.4+ | 分布式任务调度 |
| WebSocket | - | 实时通信 |
| Knife4j | 4.5+ | 接口文档 |
| Swagger | 3.0+ | 接口文档 |
| Lombok | 1.18+ | 代码简化 |
| Hutool | 5.8+ | 工具类库 |
快速开始
环境准备
bash
# Java 版本
java -version # 需要 JDK 17+
# Maven 版本
mvn -v # 需要 Maven 3.6+
# MySQL 版本
mysql --version # 需要 MySQL 8.0+
# Redis 版本
redis-server --version # 需要 Redis 7.0+数据库初始化
执行 youlai.sql 脚本完成数据库创建、表结构和基础数据的初始化。
提示
youlai.sql 脚本已包含创建数据库的语句,直接执行即可。
配置文件
修改 application-dev.yml 配置文件:
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/youlai?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
data:
redis:
host: localhost
port: 6379
password: # Redis 密码
database: 0启动项目
执行 YoulaiBootApplication.java 的 main 方法完成后端项目启动。
验证启动
访问接口文档地址 http://localhost:8080/doc.html 验证项目启动是否成功。
接口文档支持:
项目结构
youlai-boot
├── src/main/java/com/youlai
│ ├── boot
│ │ ├── common # 公共模块
│ │ │ ├── annotation # 自定义注解
│ │ │ ├── base # 基础类
│ │ │ ├── config # 全局配置
│ │ │ ├── constant # 常量定义
│ │ │ ├── exception # 异常处理
│ │ │ └── util # 工具类
│ │ ├── core # 核心模块
│ │ │ ├── security # 安全配置
│ │ │ └── filter # 过滤器
│ │ ├── system # 系统模块
│ │ │ ├── controller # 控制器
│ │ │ ├── service # 服务层
│ │ │ ├── mapper # 数据访问层
│ │ │ ├── model # 实体类
│ │ │ └── converter # 对象转换
│ │ └── YoulaiBoot Application.java # 启动类
│ └── resources
│ ├── mapper # MyBatis XML
│ ├── application.yml # 配置文件
│ └── application-dev.yml
├── sql # SQL 脚本
├── pom.xml
└── README.md核心功能
用户认证
java
@RestController
@RequestMapping("/api/v1/auth")
public class AuthController {
@PostMapping("/login")
public Result<LoginVO> login(@RequestBody LoginDTO loginDTO) {
// 用户登录逻辑
String accessToken = authService.login(loginDTO);
return Result.success(accessToken);
}
@PostMapping("/logout")
public Result<Void> logout() {
// 用户登出逻辑
authService.logout();
return Result.success();
}
}权限控制
java
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@PreAuthorize("hasAuthority('sys:user:add')")
@PostMapping
public Result<Void> addUser(@RequestBody UserDTO userDTO) {
userService.saveUser(userDTO);
return Result.success();
}
@PreAuthorize("hasAuthority('sys:user:delete')")
@DeleteMapping("/{id}")
public Result<Void> deleteUser(@PathVariable Long id) {
userService.removeUser(id);
return Result.success();
}
}分页查询
java
@GetMapping("/page")
public Result<PageResult<UserVO>> getUserPage(UserPageQuery query) {
Page<UserVO> page = userService.getUserPage(query);
return Result.success(page);
}接口文档
访问 Knife4j 文档可以查看所有接口详情:
- 用户管理接口
- 角色管理接口
- 菜单管理接口
- 部门管理接口
- 字典管理接口
- 文件上传接口
- 日志管理接口
常见问题
数据库连接失败
检查以下配置:
- 数据库服务是否启动
- 数据库地址、端口是否正确
- 用户名密码是否正确
- 数据库是否已创建
Redis 连接失败
检查以下配置:
- Redis 服务是否启动
- Redis 地址、端口是否正确
- Redis 密码是否配置
- 防火墙是否开放端口
JWT Token 无效
可能原因:
- Token 已过期,需要重新登录
- Token 格式错误
- 密钥配置不一致
相关链接
- 源码地址:Gitee / GitHub
- 在线演示:https://vue.youlai.tech
- 视频教程:Bilibili
- 完整教程:youlai-boot 企业级权限管理系统实战指南
- 问题反馈:提交 Issue
