# hatch-space **Repository Path**: pwginfo/hatch-space ## Basic Information - **Project Name**: hatch-space - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-10 - **Last Updated**: 2026-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🛠 个人工作台(Personal Workbench) > 多租户个人工作台 — Spring Boot 3 + MyBatis-Plus + SQLite + Vue 3 --- ## 📋 技术栈 ### 后端 | 技术 | 版本 | 说明 | |------|------|------| | Spring Boot | 3.5.14 | 基础框架 | | Java | 17 | JDK | | MyBatis-Plus | 3.5.17 | ORM + 多租户插件 | | SQLite | - | 本地嵌入式数据库 | | Flyway | 10.20.0 | 数据库迁移 | | Knife4j | 4.4.0 | API 文档(`/doc.html`) | | Sa-Token | 1.46.0 | 权限认证 | | Hutool | 5.8.46 | 工具类库 | | kaptcha | 2.3.2 | 图形验证码 | | Caffeine | - | 本地缓存 | | BCrypt | - | 密码加密(spring-security-crypto) | ### 前端 | 技术 | 说明 | |------|------| | Vue 3 | 渐进式 JavaScript 框架 | | TypeScript | 类型安全 | | Vite | 构建工具 | | Element Plus | UI 组件库 | | Pinia | 状态管理 | | Vue Router | 路由管理 | | Vue I18n | 国际化 | | Axios | HTTP 请求 | --- ## 🚀 快速启动 ### 环境要求 - JDK 17+ - Maven 3.8+ - Node.js 18+(前端开发) ### 后端启动 ```bash # 1. 进入项目目录 cd service-backend # 2. 编译 mvn clean compile # 3. 启动(默认 dev 环境) mvn spring-boot:run ``` ### 前端启动 ```bash # 1. 进入前端目录 cd service-web # 2. 安装依赖 npm install # 3. 启动开发服务器 npm run dev ``` ### 访问地址 | 地址 | 说明 | |------|------| | http://localhost:5173 | 前端页面 | | http://localhost:8080/doc.html | Knife4j API 文档 | ### 默认账号 | 用户名 | 密码 | 租户 | 说明 | |--------|------|------|------| | admin | admin123 | DEFAULT | 超级管理员(首次登录须改密) | --- ## 📁 项目结构 ``` personal-workbench/ ├── doc/ # 项目文档 │ ├── CODING_STYLE.md # 编码风格手册 │ ├── DATABASE_DESIGN.md # 数据库建表手册 │ └── FLYWAY_GUIDE.md # Flyway 使用指南 ├── service-backend/ # 后端 │ ├── pom.xml │ └── src/main/ │ ├── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ └── db/migration/ # Flyway 迁移脚本 (V1-V14) │ └── java/com/pwginfo/personalworkbench/ │ ├── config/ # 全局配置 │ │ ├── MybatisPlusConfig.java # 分页+租户+乐观锁插件 │ │ ├── WorkbenchTenantHandler # 多租户处理器 │ │ ├── TenantContextFilter # 租户上下文过滤器 │ │ ├── ConfigInitializer.java # 环境配置初始化 │ │ └── CacheConfig.java # Caffeine 缓存 │ ├── common/ # 公共代码 │ │ ├── entity/ # BaseEntity + 业务实体 │ │ ├── mapper/ # 公共 Mapper │ │ ├── result/ # 统一响应 Result │ │ ├── exception/ # 全局异常处理 │ │ ├── annotation/ # @OperateLog │ │ ├── aspect/ # 操作日志切面 │ │ ├── handler/ # 自动填充 │ │ ├── constants/ # 常量 │ │ └── utils/ # 工具类 │ └── modules/ │ └── system/ # 系统模块 │ ├── controller/ # 控制器 │ ├── service/ # 服务层 │ ├── mapper/ # 数据访问层 │ ├── entity/ # 实体类 │ ├── dto/ # 请求DTO │ └── vo/ # 响应VO └── service-web/ # 前端 ├── src/ │ ├── api/ # API 接口 │ ├── views/ # 页面组件 │ │ ├── login/ # 登录页 │ │ ├── home/ # 首页 │ │ ├── log/ # 日志管理 │ │ └── system/ # 系统管理 │ ├── layouts/ # 布局组件 │ ├── stores/ # Pinia 状态 │ ├── router/ # 路由配置 │ └── locales/ # 国际化 └── package.json ``` --- ## 🗄 数据库 SQLite 本地文件存储,Flyway 自动管理版本迁移。 ### 迁移脚本 | 版本 | 文件 | 说明 | |------|------|------| | V1 | `V1__create_operate_log.sql` | 操作日志表 | | V2 | `V2__create_sys_config.sql` | 系统配置表 + 初始化数据 | | V3 | `V3__create_login_log.sql` | 登录日志表 | | V4 | `V4__create_sys_user.sql` | 系统用户表 + 超级管理员 | | V5 | `V5__add_pwd_force_change_config.sql` | 密码到期强制修改配置 | | V6 | `V6__add_plaintext_pwd_config.sql` | 前端密码明文输入开关 | | V7 | `V7__add_captcha_config.sql` | 登录验证码开关 | | V8 | `V8__add_pwd_strength_config.sql` | 密码强度校验配置 | | V9 | `V9__create_role_tables.sql` | 角色表 + 用户角色关联表 | | V10 | `V10__fix_tenant_id_and_sys_config.sql` | 修正租户ID + 系统配置租户隔离 | | V11 | `V11__create_tenant_table.sql` | 租户管理表 + 默认租户 | | V12 | `V12__update_all_tenant_id.sql` | 更新所有表租户ID | | V13 | `V13__fix_tenant_missing_columns.sql` | 租户表补 dep_id 字段 | | V14 | `V14__fix_role_unique_index.sql` | 唯一索引改为租户维度联合唯一 | --- ## 🔐 功能模块 ### 系统管理 | 模块 | 说明 | 权限 | |------|------|------| | 租户管理 | 租户 CRUD + 创建自动建管理员 | 仅 DEFAULT 租户 | | 用户管理 | 用户 CRUD + 角色分配 + 重置密码 | 所有租户 | | 角色管理 | 角色 CRUD + 用户分配 | 所有租户 | | 系统配置 | 配置 CRUD + 分组管理 | 所有租户(租户隔离) | ### 日志管理 | 模块 | 说明 | |------|------| | 操作日志 | AOP 自动记录,支持查看详情 | | 登录日志 | 登录/登出/失败/锁定完整记录 | --- ## 🏢 多租户 ### 架构 ``` MyBatis-Plus TenantLineInnerInterceptor ↓ 自动追加 WHERE rel_tenant_id = ? 所有 SQL 查询自动过滤当前租户数据 ``` ### 租户隔离策略 | 表 | 隔离 | 说明 | |----|------|------| | t_sys_user | ✅ | 每个租户独立用户 | | t_sys_role | ✅ | 每个租户独立角色 | | t_sys_user_role | ✅ | 每个租户独立角色分配 | | t_sys_config | ✅ | 每个租户独立配置 | | t_sys_operate_log | ✅ | 每个租户独立日志 | | t_sys_login_log | ✅ | 每个租户独立日志 | | t_sys_tenant | ❌ | 全局共享 | | t_flyway_schema_history | ❌ | 全局共享 | ### 登录方式 | 方式 | 说明 | |------|------| | 指定租户编码 | 精确登录到指定租户 | | 不填租户编码 | 跨租户匹配(DEFAULT 租户管理员用) | --- ## 🔐 安全特性 | 特性 | 说明 | |------|------| | 密码加密 | BCrypt 哈希存储 | | 密码策略 | 复杂度、长度、有效期、强制修改 | | 登录锁定 | 连续失败 N 次自动锁定 | | TOTP 双因素 | 系统级开关 + 用户级开关 | | 图形验证码 | kaptcha + Caffeine 缓存 | | 登录审计 | 完整登录/登出/失败日志 | | 多租户隔离 | SQL 层自动过滤 | | 租户管理权限 | 仅 DEFAULT 租户可操作 | --- ## ⚙️ 环境配置 切换环境:修改 `application.yml` 中的 `spring.profiles.active` ```yaml spring: profiles: active: dev # 改为 prod ``` ### DEV vs PROD 对比 | 配置 | DEV | PROD | |------|:---:|:----:| | 密码明文输入 | ✅ | ❌ | | 密码强制修改 | ❌ | ✅ | | TOTP 双因素 | ❌ | ✅ | | 登录验证码 | ❌ | ✅ | | 登录失败锁定 | ❌ | ✅ | | SQL 日志 | ✅ | ❌ | | API 文档 | ✅ | ❌ | --- ## 📄 相关文档 - [编码风格手册](doc/CODING_STYLE.md) - [数据库建表手册](doc/DATABASE_DESIGN.md) - [Flyway 使用指南](doc/FLYWAY_GUIDE.md)