logo
0
0
WeChat Login
Forkfromblacshade/base-admin, behindmaster34 commits

base-admin

通用后台管理系统,前后端分离架构,基于 Spring Boot 4.0.5 + Vue 3 构建,提供开箱即用的后台管理基础能力。

技术栈

后端技术栈

技术版本说明
Java25运行环境
Spring Boot4.0.5基础框架
Spring Security(parent)认证与授权
Spring Validation(parent)参数校验(JSR 380)
Spring Data Redis(parent)缓存与会话管理
Spring Actuator(parent)健康检查与监控端点
MyBatis-Plus3.5.16ORM 框架
Flyway(parent)数据库版本迁移
MySQL Connector9.6.0关系型数据库驱动
JWT (jjwt)0.13.0无状态认证
SpringDoc OpenAPI3.0.2API 文档(Swagger UI)
Hutool5.8.44工具类库
Lombok(parent)简化代码
Jackson3.x (parent)JSON 序列化

*(parent)* 表示版本由 spring-boot-starter-parent:4.0.5 统一管理,无需手动指定。

前端技术栈

技术版本说明
Vue3.4渐进式 JavaScript 框架
TypeScript5.4类型安全的 JavaScript 超集
Vite5.2前端构建工具
Element Plus2.7UI 组件库
Pinia2.1状态管理
Vue Router4.3路由管理
Axios1.7HTTP 请求库
Vitest4.1单元测试框架
ESLint9.0代码检查工具
Prettier3.3代码格式化工具

功能模块

系统管理

  • 用户管理 — 用户的增删改查、分页查询
  • 角色管理 — 角色定义与权限分配
  • 菜单管理 — 菜单树维护(目录/菜单/按钮)
  • 部门管理 — 组织架构树管理
  • 岗位管理 — 岗位编码与排序
  • 字典管理 — 系统字典类型与字典数据维护
  • 参数配置 — 系统级配置项管理

认证鉴权

  • 登录/登出 — 用户名密码登录,支持验证码
  • JWT Token — 基于 Token 的无状态认证
  • 权限控制 — 基于 RBAC 的接口级权限校验

系统监控

  • 在线用户 — 当前在线用户管理
  • 服务监控 — 服务器运行状态信息(CPU、内存、磁盘等)
  • 缓存监控 — Redis 缓存信息查看与管理

日志管理

  • 操作日志 — 系统操作审计日志
  • 登录日志 — 用户登录记录查询

其他功能

  • 通知公告 — 系统公告发布与管理
  • 文件管理 — 文件上传与记录管理

项目结构

src/main/java/com/blacshade/baseadmin/ ├── BaseAdminApplication.java # 启动类 ├── auth/ # 认证模块 │ ├── controller/AuthController.java │ ├── dto/ # 登录请求/响应、验证码 VO │ └── service/AuthService.java ├── common/ # 通用模块 │ ├── annotation/ # 自定义注解(@Log, @RateLimiter) │ ├── aspect/ # AOP 切面(日志、限流) │ ├── base/ # 基础类(BaseEntity, BaseMapper, BaseService) │ ├── config/ # 配置类(CORS, Security, Redis, MyBatis-Plus 等) │ ├── constant/ # 常量定义 │ ├── enums/ # 枚举(BusinessType, UserStatus) │ ├── exception/ # 全局异常处理 │ ├── filter/ # JWT 认证过滤器 │ ├── result/R.java # 统一响应封装 │ └── util/ # 工具类(JWT, Redis, IP, Tree) ├── file/ # 文件管理模块 ├── log/ # 日志模块(操作日志 + 登录日志) ├── monitor/ # 系统监控模块 ├── notice/ # 通知公告模块 └── system/ # 系统管理模块(用户/角色/菜单/部门/岗位/字典/配置)
src/main/resources/ ├── application.yml # 主配置 ├── application-dev.yml # 开发环境配置 ├── application-prod.yml # 生产环境配置 ├── db/ │ ├── migration/ # Flyway 数据库迁移脚本 │ │ ├── V1__init_schema.sql # V1: 建表语句 │ │ └── V2__init_data.sql # V2: 初始数据 │ ├── schema.sql # 原始建表脚本(仅供参考) │ └── data.sql # 原始数据脚本(仅供参考) └── mapper/system/ # MyBatis XML 映射文件

前端项目结构(web/)

web/ ├── src/ │ ├── main.ts # 应用入口 │ ├── App.vue # 根组件 │ ├── api/ # API 接口层(按模块划分) │ │ ├── auth.ts # 认证相关接口 │ │ ├── user.ts # 用户管理接口 │ │ └── ... # 其他模块接口 │ ├── layout/ # 布局组件 │ │ ├── index.vue # 主布局 │ │ └── components/ # 布局子组件(Header, Sidebar, TabsView) │ ├── router/ # 路由配置 │ ├── stores/ # Pinia 状态管理 │ │ ├── user.ts # 用户状态 │ │ ├── app.ts # 应用状态 │ │ └── tabs.ts # 标签页状态 │ ├── styles/ # 全局样式 │ │ ├── global.css # 全局样式 │ │ └── variables.css # CSS 变量 │ ├── types/ # TypeScript 类型定义 │ ├── utils/ # 工具函数(request, auth) │ ├── views/ # 页面组件(按模块划分) │ │ ├── login/ # 登录页 │ │ ├── dashboard/ # 仪表盘 │ │ ├── system/ # 系统管理页面 │ │ ├── log/ # 日志页面 │ │ ├── monitor/ # 监控页面 │ │ └── ... # 其他模块页面 │ └── __tests__/ # 前端单元测试 ├── index.html # HTML 入口 ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 ├── eslint.config.js # ESLint 配置 ├── .prettierrc.json # Prettier 配置 └── Dockerfile # 前端 Docker 构建

快速开始

环境要求

工具版本说明
JDK25+后端运行环境
Maven3.8+后端构建工具
Node.js20+前端运行环境
npm9+前端包管理器
MySQL8.0+关系型数据库
Redis6.0+缓存服务

本地开发

1. 初始化数据库

创建数据库 base_admin(字符集 utf8mb4),表结构将在应用首次启动时由 Flyway 自动创建并初始化。

Flyway 会自动执行 src/main/resources/db/migration/ 下的迁移脚本,无需手动导入 SQL。

如需手动初始化,可执行原始 SQL 文件:

mysql -u root -p < src/main/resources/db/schema.sql mysql -u root -p base_admin < src/main/resources/db/data.sql

2. 修改配置

编辑 src/main/resources/application-dev.yml,修改数据库和 Redis 连接信息:

spring: datasource: url: jdbc:mysql://localhost:3306/base_admin?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: your_username password: your_password data: redis: host: localhost port: 6379

3. 启动后端

mvn spring-boot:run

启动成功后访问:

4. 启动前端

# 进入前端目录 cd web # 安装依赖 npm install # 启动开发服务器 npm run dev

启动成功后访问:http://localhost:3000

前端开发服务器会自动代理 API 请求到后端(http://localhost:8080),无需额外配置跨域。

Docker 部署(推荐生产环境使用)

# 1. 复制环境变量配置并填写实际值 cp .env.example .env # 编辑 .env 文件,设置 JWT_SECRET、DB_PASSWORD、REDIS_PASSWORD 等 # 2. 一键启动所有服务 docker compose up -d # 3. 查看服务状态 docker compose ps docker compose logs -f backend

部署成功后访问:

生产环境请确保通过反向代理(如 Nginx)配置 HTTPS,并设置正确的 CORS_ALLOWED_ORIGINS

生产部署注意事项

使用 Docker 部署前,请务必修改 .env 文件中的以下配置:

配置项说明安全建议
JWT_SECRETJWT 签名密钥使用随机字符串,至少 32 个字符
DB_PASSWORDMySQL root 密码使用强密码,不要使用默认值
REDIS_PASSWORDRedis 密码使用强密码
CORS_ALLOWED_ORIGINSCORS 允许域名设置为你的实际域名

可以使用 openssl rand -hex 32 生成安全的随机密钥。

其他建议

  • 通过反向代理(Nginx)配置 HTTPS 证书
  • 定期备份数据库(docker exec base-admin-mysql mysqldump -u root -p base_admin > backup.sql
  • 修改默认管理员密码(默认 admin / admin123

依赖清单

后端 Maven 依赖(pom.xml)

以下列出 pom.xml 中声明的 全部依赖,包含完整的 Maven 坐标、版本和作用域,供上线部署核对。

父 POM:

属性
groupIdorg.springframework.boot
artifactIdspring-boot-starter-parent
version4.0.5

版本属性(properties):

属性名版本说明
java.version25JDK 版本
mybatis-plus.version3.5.16MyBatis-Plus ORM
jjwt.version0.13.0JWT 认证库
springdoc.version3.0.2OpenAPI 文档
hutool.version5.8.44工具类库
mysql.version9.6.0MySQL 驱动

编译依赖(scope: compile):

#groupIdartifactId版本说明
1org.springframework.bootspring-boot-starter-web(parent)Web/REST 框架(内嵌 Tomcat)
2org.springframework.bootspring-boot-starter-security(parent)认证与授权框架
3io.jsonwebtokenjjwt-api0.13.0JWT API 接口定义
4com.baomidoumybatis-plus-spring-boot4-starter3.5.16MyBatis-Plus ORM(适配 Spring Boot 4.x)
5org.springframework.bootspring-boot-starter-data-redis(parent)Redis 缓存集成(Lettuce 客户端)
6org.springframework.bootspring-boot-starter-validation(parent)Bean 参数校验(Hibernate Validator)
7org.springdocspringdoc-openapi-starter-webmvc-ui3.0.2OpenAPI 3.0 / Swagger UI
8org.springframework.bootspring-boot-starter-actuator(parent)健康检查、指标暴露、监控端点
9cn.hutoolhutool-all5.8.44通用工具类库(包含 IO、加密、HTTP 等)
10org.projectlomboklombok(parent)代码生成(@Data, @Getter 等),optional
11org.springframework.bootspring-boot-starter-flyway(parent)数据库版本迁移(Flyway)

运行时依赖(scope: runtime):

#groupIdartifactId版本说明
11io.jsonwebtokenjjwt-impl0.13.0JWT 运行时实现
12io.jsonwebtokenjjwt-jackson0.13.0JWT Jackson 序列化支持
13com.mysqlmysql-connector-j9.6.0MySQL JDBC 驱动

测试依赖(scope: test):

#groupIdartifactId版本说明
14org.springframework.bootspring-boot-starter-test(parent)测试框架(JUnit 5, Mockito, AssertJ)
15org.springframework.securityspring-security-test(parent)Security 测试工具

前端 npm 依赖(web/package.json)

运行时依赖(dependencies):

#包名版本说明
1vue^3.4.0渐进式 JavaScript 框架
2vue-router^4.3.0客户端路由管理
3pinia^2.1.0状态管理
4element-plus^2.7.0UI 组件库
5@element-plus/icons-vue^2.3.0Element Plus 图标集
6axios^1.7.0HTTP 请求库

开发依赖(devDependencies):

#包名版本说明
7typescript^5.4.0TypeScript 编译器
8vite^5.2.0前端构建工具
9vue-tsc^2.0.0Vue TypeScript 类型检查
10@vitejs/plugin-vue^5.0.0Vite Vue 插件
11vitest^4.1.2单元测试框架
12@vue/test-utils^2.4.6Vue 组件测试工具
13eslint^9.0.0代码检查
14@eslint/js^9.0.0ESLint JS 规则
15@typescript-eslint/parser^8.0.0TypeScript ESLint 解析器
16eslint-plugin-vue^9.28.0Vue ESLint 规则
17eslint-config-prettier^10.0.0ESLint + Prettier 兼容配置
18prettier^3.3.0代码格式化
19jsdom^29.0.1DOM 模拟(测试环境)
20happy-dom^20.8.9DOM 模拟(测试环境,轻量替代)

API 概览

模块路径说明
认证POST /auth/login用户登录
认证POST /auth/logout用户登出
认证GET /auth/captcha获取验证码
用户GET /system/user/list用户列表(分页)
用户GET /system/user/{id}用户详情
用户POST /system/user新增用户
用户PUT /system/user修改用户
用户DELETE /system/user/{ids}删除用户
角色/system/role/**角色管理
菜单/system/menu/**菜单管理
部门/system/dept/**部门管理
岗位/system/post/**岗位管理
字典/system/dict/**字典管理
字典项/system/dict-item/**字典数据管理
配置/system/config/**参数配置管理
操作日志/log/oper/**操作日志查询
登录日志/log/login/**登录日志查询
通知公告/notice/**公告管理
文件/file/**文件上传与管理
监控/monitor/**系统监控

架构设计

认证机制

采用 JWT + Spring Security 实现无状态认证:

  • 登录成功后返回 JWT Token
  • 请求头携带 Authorization: Bearer <token> 进行身份校验
  • Token 存储于 Redis 中,支持主动失效

统一响应格式

所有接口统一返回 R<T> 格式:

{ "code": 200, "message": "操作成功", "data": {} }

软删除

使用 MyBatis-Plus 逻辑删除功能,deleted 字段:

  • 0 — 未删除
  • 1 — 已删除

审计字段

所有实体表统一包含审计字段:create_timeupdate_timecreate_byupdate_by,通过 MyBatis-Plus MetaHandler 自动填充。

自定义注解

  • @Log — 操作日志记录,自动记录业务操作类型
  • @RateLimiter — 接口限流,防止恶意请求

环境变量

变量名默认值说明
JWT_SECRET(无默认值,必须设置)JWT 签名密钥,至少 32 个字符
JWT_EXPIRATION86400000Token 过期时间(毫秒),默认 24 小时
CORS_ALLOWED_ORIGINShttps://yourdomain.comCORS 允许的域名(逗号分隔)
REDIS_PASSWORD(无默认值,必须设置)Redis 密码

License

MIT

About

No description, topics, or website provided.
Language
Java64.3%
Vue22.6%
TypeScript12%
JavaScript0.5%
Others0.6%