Skip to content

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 Boot3.3+核心框架
Spring Security6.3+安全框架
MyBatis-Plus3.5+ORM 框架
MySQL8.0+数据库
Redis7.0+缓存 & 会话
JWT0.12+令牌认证
XXL-Job2.4+分布式任务调度
WebSocket-实时通信
Knife4j4.5+接口文档
Swagger3.0+接口文档
Lombok1.18+代码简化
Hutool5.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 格式错误
  • 密钥配置不一致

相关链接

基于 MIT 许可发布