# Freedom Admin 基于 **Spring Boot 2.7.10** 的后台管理系统后端服务,提供用户、角色、部门、权限等基础管理能力。 ## 技术栈 | 分类 | 技术 | | ---- | ---- | | 核心框架 | Spring Boot 2.7.10 | | 安全框架 | Spring Security 3.3.2 + JWT(jjwt 0.9.1) | | ORM | MyBatis-Plus 3.5.7 + PageHelper 2.1.0 | | 模板引擎 | Thymeleaf(登录页等) | | 数据库 | MySQL 8.0(utf8mb4) | | 连接池 | HikariCP | | 其他 | Lombok、Fastjson、Guava、Spring Mail | ## 项目结构 ``` freedom-admin ├── sql/ │ └── init.sql # 数据库初始化脚本(建库建表 + 基础数据) ├── src/main/java/com/freedom/admin/ │ ├── AdminApplication.java # 启动类 │ ├── base/ # 基础类与通用返回结构 │ ├── common/ # 通用常量 / 工具 │ ├── config/ # Spring Security、JWT 等配置 │ ├── controller/ # 控制器层 │ ├── entity/ # 实体类 │ ├── mapper/ # MyBatis-Plus Mapper │ ├── service/ # 业务层 │ └── util/ # 工具类 └── src/main/resources/ ├── mapper/ # MyBatis XML 映射文件 ├── logback-spring.xml # 日志配置(控制台 UTF-8) └── application.yml # 应用配置 ``` ## 数据模型 | 表 | 说明 | | -- | ---- | | `t_sys_user` | 用户表(BCRYPT 密码加密) | | `t_sys_dept` | 部门表(支持树形层级) | | `t_sys_role` | 角色表 | | `t_sys_permission` | 权限 / 菜单表(动态路由数据源) | | `t_sys_user_role` | 用户-角色关联表 | | `t_sys_role_permission` | 角色-权限关联表 | ## 功能特性 - **用户管理**:用户注册、登录、JWT 认证、信息维护 - **角色管理**:角色 CRUD、角色-权限绑定 - **部门管理**:树形部门结构 - **权限管理**:菜单 / 权限点维护,驱动前端动态路由 - **邮件服务**:基于 Spring Mail 的邮件发送能力 - **系统特性**:统一异常处理、PageHelper 分页、逻辑删除、接口权限控制 ## 快速开始 ### 环境要求 - JDK 1.8+ - Maven 3.6.3+ - MySQL 8.0+ ### 1. 初始化数据库 ```bash mysql -u root -p < sql/init.sql ``` 脚本会自动创建 `freedom_db` 数据库、全部业务表并写入基础数据(默认管理员账号 `admin` / `123456`)。 ### 2. 修改数据库配置 编辑 `src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/freedom_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: your_password ``` ### 3. 启动服务 ```bash # 开发运行 mvn spring-boot:run # 或打包运行 mvn clean package -DskipTests java -jar target/freedom-admin-1.0.1.jar ``` > Windows 下可直接使用 `start.bat` 启动(已自动设置控制台 UTF-8 编码,避免中文日志乱码)。 启动后服务地址:`http://localhost:8800` ## 注意事项 - JWT 密钥与过期时间在 `application.yml` 的 `jwt` 节点配置,生产环境请务必更换密钥。 - 邮件授权码请使用邮箱服务商提供的 SMTP 授权码,勿直接使用登录密码。 - 表 / 列中文注释建议使用 UTF-8 编码执行脚本,避免乱码入库。 ## License 本项目仅用于内部学习与研究使用。