这是给当前 vue-vben-admin 前端配套的企业级 Spring Boot 后端项目。
复用服务器已有 MySQL、Redis、MinIO 时,使用 deploy/README.md 中的部署步骤。
deploy/docker-compose.yml 只启动 Java 后端;项目根目录的 docker-compose.yml 是另建配套服务的配置。
- Java 21
- Spring Boot 3
- Spring Security
- JWT
- Redis
- MySQL
- MyBatis-Plus
- MinIO
- Flyway
- Knife4j / OpenAPI
- EasyExcel
这些接口已经按当前前端请求习惯做了适配:
POST /api/auth/loginPOST /api/auth/refreshPOST /api/auth/logoutGET /api/user/infoGET /api/menu/allGET /api/system/user/listGET /api/system/role/listGET /api/system/menu/listPOST /api/system/file/upload
大部分接口统一返回:
{
"code": 200,
"message": "操作成功",
"data": {}
}/api/auth/refresh 目前故意返回纯字符串 token,因为当前前端刷新 token 的拦截器就是按这个格式接收的。
开发环境配置文件是:
src/main/resources/application-dev.yml
当前已经写死为:
- MySQL:
192.168.137.10:3306/vbenAdmin - MySQL 用户名:
admin - MySQL 密码:
abc123 - Redis:
192.168.137.10:6379 - MinIO:
http://192.168.137.10:9000
Java 后端现在对齐旧 node-admin/database/init.sql 的表结构:
- 用户表:
users - 角色表:
roles - 权限表:
permissions - 菜单表:
menus - 用户角色关联表:
user_roles - 角色权限关联表:
role_permissions
密码字段使用旧库的 password_hash,算法是:
SHA-256("vbenAdmin:" + 明文密码)
前端接口参数也按当前 vue-vben-admin/src/api 对齐:
- 登录参数:
username、password - 用户角色参数:
roleIds/roles - 角色权限参数:
permissions,这里传的是菜单 ID 列表 - 菜单父级参数:
parentId/pid - 菜单权限参数:
permissionCode/authCode
如果启动时报:
Access denied for user 'admin'@'192.168.137.1' (using password: YES)
这不是 Java 代码问题,而是 MySQL 拒绝了 admin 用户从 192.168.137.1 这台机器连接数据库。
可以在 MySQL 服务器上用 root 或管理员账号执行:
CREATE DATABASE IF NOT EXISTS `vbenAdmin` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS 'admin'@'%' IDENTIFIED BY 'abc123';
CREATE USER IF NOT EXISTS 'admin'@'192.168.137.1' IDENTIFIED BY 'abc123';
ALTER USER 'admin'@'%' IDENTIFIED BY 'abc123';
ALTER USER 'admin'@'192.168.137.1' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON `vbenAdmin`.* TO 'admin'@'%';
GRANT ALL PRIVILEGES ON `vbenAdmin`.* TO 'admin'@'192.168.137.1';
FLUSH PRIVILEGES;也可以直接执行项目里的 SQL 文件:
docs/mysql-permission.sql
mvn spring-boot:run首次启动时,如果旧库的用户、角色、菜单表是空的,系统会自动初始化旧后端同款管理员账号:
admin / 123456
当前前端原来可能代理到 http://localhost:3000/api。
换成这个 Java 后端后,代理目标改成:
http://localhost:8080/api
保留原来的 /api 重写规则即可。
项目启动后可以打开:
http://localhost:8080/api/doc.htmlhttp://localhost:8080/api/swagger-ui/index.html