386 lines
8.3 KiB
Markdown
386 lines
8.3 KiB
Markdown
# Java后台管理系统架构设计文档
|
|
|
|
## 整体架构图
|
|
|
|
```mermaid
|
|
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)
|
|
|
|
```mermaid
|
|
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)
|
|
|
|
```mermaid
|
|
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**: 跨域配置
|
|
|
|
## 模块依赖关系图
|
|
|
|
```mermaid
|
|
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
|
|
```
|
|
|
|
## 接口契约定义
|
|
|
|
### 认证接口
|
|
```yaml
|
|
POST /api/auth/login:
|
|
请求: {username, password}
|
|
响应: {token, userInfo, permissions}
|
|
|
|
POST /api/auth/logout:
|
|
请求: {token}
|
|
响应: {message}
|
|
|
|
GET /api/auth/info:
|
|
请求: Authorization Header
|
|
响应: {userInfo, roles, permissions}
|
|
```
|
|
|
|
### 用户管理接口
|
|
```yaml
|
|
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}
|
|
```
|
|
|
|
### 角色管理接口
|
|
```yaml
|
|
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}
|
|
```
|
|
|
|
### 菜单管理接口
|
|
```yaml
|
|
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}
|
|
```
|
|
|
|
## 数据流向图
|
|
|
|
```mermaid
|
|
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.渲染页面
|
|
```
|
|
|
|
## 异常处理策略
|
|
|
|
### 全局异常处理
|
|
```java
|
|
@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() {}
|
|
}
|
|
```
|
|
|
|
### 前端异常处理
|
|
```javascript
|
|
// 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)
|
|
}
|
|
)
|
|
```
|
|
|
|
## 数据库设计
|
|
|
|
### 核心表结构
|
|
```sql
|
|
-- 用户表
|
|
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认证流程
|
|
```mermaid
|
|
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.返回数据
|
|
```
|
|
|
|
### 权限控制模型
|
|
```mermaid
|
|
graph LR
|
|
A[用户] --> B[角色]
|
|
B --> C[菜单权限]
|
|
B --> D[接口权限]
|
|
|
|
E[前端路由] --> C
|
|
F[后端接口] --> D
|
|
|
|
G[权限验证] --> E
|
|
G --> F
|
|
```
|
|
|
|
**✅ 架构设计完成,满足质量门控要求:架构图清晰准确、接口定义完整、与现有系统无冲突、设计可行性已验证** |