8.3 KiB
8.3 KiB
Java后台管理系统架构设计文档
整体架构图
graph TB
subgraph "前端层 - Vue3"
A[管理界面] --> B[Vue Router]
B --> C[Pinia状态管理]
C --> D[Axios HTTP客户端]
end
subgraph "网关层"
D --> E[Nginx反向代理]
end
subgraph "后端层 - Spring Boot"
E --> F[Controller层]
F --> G[Spring Security]
G --> H[Service业务层]
H --> I[MyBatis-Plus数据层]
end
subgraph "数据层"
I --> J[MySQL数据库]
end
subgraph "基础设施"
K[Redis缓存] --> H
L[JWT认证] --> G
M[Swagger文档] --> F
end
分层设计和核心组件
1. 前端层架构 (Vue3)
graph LR
subgraph "前端模块"
A[登录模块] --> E[主布局]
B[用户管理] --> E
C[角色管理] --> E
D[菜单管理] --> E
E --> F[路由守卫]
F --> G[API封装]
G --> H[工具库]
end
核心组件:
- Layout组件: 主布局、侧边栏、顶部导航
- Auth组件: 登录表单、权限验证
- Table组件: 数据表格、分页、搜索
- Form组件: 表单验证、数据提交
- Dialog组件: 弹窗、确认框
2. 后端层架构 (Spring Boot)
graph TB
subgraph "Controller层"
A[AuthController]
B[UserController]
C[RoleController]
D[MenuController]
E[SystemController]
end
subgraph "Service层"
F[AuthService]
G[UserService]
H[RoleService]
I[MenuService]
J[LogService]
end
subgraph "Mapper层"
K[UserMapper]
L[RoleMapper]
M[MenuMapper]
N[LogMapper]
end
A --> F
B --> G
C --> H
D --> I
F --> K
G --> K
H --> L
I --> M
核心组件:
- SecurityConfig: Spring Security配置
- JwtUtils: JWT工具类
- GlobalExceptionHandler: 全局异常处理
- ValidationConfig: 数据验证配置
- CorsConfig: 跨域配置
模块依赖关系图
graph TD
A[前端Vue3应用] --> B[后端API网关]
B --> C[认证授权模块]
C --> D[用户管理模块]
C --> E[角色管理模块]
C --> F[菜单管理模块]
D --> G[数据访问层]
E --> G
F --> G
G --> H[MySQL数据库]
I[日志模块] --> G
J[监控模块] --> D
J --> E
J --> F
接口契约定义
认证接口
POST /api/auth/login:
请求: {username, password}
响应: {token, userInfo, permissions}
POST /api/auth/logout:
请求: {token}
响应: {message}
GET /api/auth/info:
请求: Authorization Header
响应: {userInfo, roles, permissions}
用户管理接口
GET /api/users:
请求: {page, size, search}
响应: {data[], total, pages}
POST /api/users:
请求: {username, password, email, roleIds[]}
响应: {id, message}
PUT /api/users/{id}:
请求: {username, email, status, roleIds[]}
响应: {message}
DELETE /api/users/{id}:
响应: {message}
角色管理接口
GET /api/roles:
响应: {data[], total}
POST /api/roles:
请求: {roleName, description, menuIds[]}
响应: {id, message}
PUT /api/roles/{id}:
请求: {roleName, description, menuIds[]}
响应: {message}
DELETE /api/roles/{id}:
响应: {message}
菜单管理接口
GET /api/menus/tree:
响应: {treeData[]}
POST /api/menus:
请求: {menuName, path, component, parentId, icon, sort}
响应: {id, message}
PUT /api/menus/{id}:
请求: {menuName, path, component, icon, sort, status}
响应: {message}
DELETE /api/menus/{id}:
响应: {message}
数据流向图
sequenceDiagram
participant U as 用户
participant F as 前端Vue3
participant G as 网关Nginx
participant S as Spring Boot
participant D as MySQL
U->>F: 1.登录请求
F->>G: 2.POST /api/auth/login
G->>S: 3.转发请求
S->>D: 4.验证用户信息
D-->>S: 5.返回用户数据
S-->>G: 6.生成JWT返回
G-->>F: 7.返回Token
F-->>U: 8.登录成功
U->>F: 9.访问用户管理
F->>G: 10.GET /api/users (带Token)
G->>S: 11.验证Token
S->>D: 12.查询用户列表
D-->>S: 13.返回数据
S-->>G: 14.返回JSON
G-->>F: 15.返回数据
F-->>U: 16.渲染页面
异常处理策略
全局异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
// 参数验证异常
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result handleValidationException() {}
// 认证异常
@ExceptionHandler(AuthenticationException.class)
public Result handleAuthException() {}
// 授权异常
@ExceptionHandler(AccessDeniedException.class)
public Result handleAccessDeniedException() {}
// 业务异常
@ExceptionHandler(BusinessException.class)
public Result handleBusinessException() {}
// 系统异常
@ExceptionHandler(Exception.class)
public Result handleSystemException() {}
}
前端异常处理
// Axios响应拦截器
axios.interceptors.response.use(
response => response.data,
error => {
const { status, data } = error.response
switch(status) {
case 401: // 未认证
router.push('/login')
break
case 403: // 无权限
ElMessage.error('权限不足')
break
case 500: // 服务器错误
ElMessage.error('服务器异常')
break
default:
ElMessage.error(data.message || '请求失败')
}
return Promise.reject(error)
}
)
数据库设计
核心表结构
-- 用户表
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
status TINYINT DEFAULT 1 COMMENT '1启用 0禁用',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 角色表
CREATE TABLE sys_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_name VARCHAR(50) UNIQUE NOT NULL,
role_key VARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(200),
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 菜单表
CREATE TABLE sys_menu (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
menu_name VARCHAR(50) NOT NULL,
parent_id BIGINT DEFAULT 0,
path VARCHAR(200),
component VARCHAR(200),
menu_type CHAR(1) COMMENT 'M目录 C菜单 F按钮',
permission VARCHAR(100),
icon VARCHAR(100),
sort_order INT DEFAULT 0,
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 用户角色关联表
CREATE TABLE sys_user_role (
user_id BIGINT,
role_id BIGINT,
PRIMARY KEY (user_id, role_id)
);
-- 角色菜单关联表
CREATE TABLE sys_role_menu (
role_id BIGINT,
menu_id BIGINT,
PRIMARY KEY (role_id, menu_id)
);
-- 操作日志表
CREATE TABLE sys_operation_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
username VARCHAR(50),
operation VARCHAR(50),
method VARCHAR(200),
params TEXT,
ip VARCHAR(50),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
安全架构设计
JWT认证流程
sequenceDiagram
participant C as 客户端
participant S as 服务端
participant R as Redis
C->>S: 1.用户名密码登录
S->>S: 2.验证用户信息
S->>S: 3.生成JWT Token
S->>R: 4.存储Token(可选)
S-->>C: 5.返回Token
C->>S: 6.携带Token访问API
S->>S: 7.验证Token有效性
S->>S: 8.解析用户信息
S->>S: 9.权限验证
S-->>C: 10.返回数据
权限控制模型
graph LR
A[用户] --> B[角色]
B --> C[菜单权限]
B --> D[接口权限]
E[前端路由] --> C
F[后端接口] --> D
G[权限验证] --> E
G --> F
✅ 架构设计完成,满足质量门控要求:架构图清晰准确、接口定义完整、与现有系统无冲突、设计可行性已验证