评估日期: 2026-08-15
评估范围: QuickBlue-parent-pg 全项目(9 模块 + 前端)
上一版本: v10.0(2026-06-30)
基准环境: Spring Boot 3.5.16 + Spring Cloud 2025.0.3 + Spring Cloud Alibaba 2025.0.0.0 + PostgreSQL 18 + JDK 21
v12.0 展望: 融入"一切皆插件"架构思想,核心理论 + 渐进式整合路线详见第 12 章
| 类别 | 变化项 | v10.0 | v11.0 |
|---|---|---|---|
| 框架升级 | Spring Boot 版本 | 3.2.x | 3.5.10 (跨 2 个大版本) |
| 框架升级 | Spring Cloud 版本 | 2023.0.4 | 2025.0.1 |
| 框架升级 | Spring Cloud Alibaba | — | 2025.0.0.0 (首次引入) |
| 框架升级 | Micrometer Tracing | 旧 Sleuth | 1.4.4 (替代 Sleuth) |
| 安全修复 | SM4 密钥外置 | ✅ 已修复 | ✅ 已验证 — 环境变量注入 + 启动校验 |
| 安全修复 | Gateway Fail-Closed | ✅ 已修复 | ✅ 已验证 — authFailOpen=false |
| 安全修复 | Druid WallFilter | ✅ 已修复 | ✅ 已验证 — 所有环境启用 |
| 安全修复 | 密码标记 | ✅ 已修复 | ✅ 已验证 — 28 处 [安全] 注释 |
| 新功能 | 代码生成器自动发现 | ❌ 不存在 | 🆕 新增 — pg_database 动态发现 |
| 新功能 | Report 报表模块 | 🟡 开发中 | ✅ 稳定 — 完整引擎 + 4 类导出 |
| 集成 | AgentScope Java 2.0 | ❌ 不存在 | 🆕 新增 — 智能体开发框架,替代手写推理循环 |
| 基础设施 | 链路追踪升级 | Sleuth | Micrometer Tracing 1.4.4 |
| 前端 | 登录 UX 优化 | 有闪烁 | ✅ 修复 — loading 状态流畅 |
| 存量风险 | CORS 硬编码 | ❌ 未修复 | ❌ 仍存在 |
| 存量风险 | XSS 过滤器 | ❌ 未修复 | ❌ 仍存在 |
| 存量风险 | CSRF 禁用 | ❌ 未修复 | ❌ 仍存在 |
| 存量风险 | AI Agent CRUD | 🟡 部分 TODO | 🟡 无变化 |
| 存量风险 | AI 迁移脚本 | 空文件 | ❌ 仍为空 |
| 版本 | 日期 | 关键里程碑 |
|---|---|---|
| v9.0 | 2026-06-20 | 首次全面扫描,发现 4 个 P0 安全风险 |
| v10.0 | 2026-06-30 | P0 安全修复落地,Report 模块初具,AI 增强,升 Spring Boot 3.5.10 |
| v11.0 | 2026-08-06 | P0 修复全部验证通过,代码生成器自动发现,Report 模块稳定,登录 UX 优化 |
n
┌─────────────────────────┐│ Nginx / API Gateway ││ QuickBlue-gateway ││ (port: 8080) ││ - Auth: Sa-Token+Redis ││ - RateLimit: Sentinel ││ - CORS: Env Config │└───────┬─────────────────┘│┌──────────────────┼──────────────────┐│ │ │▼ ▼ ▼┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│ QuickBlue-system │ │ QuickBlue-support│ │ QuickBlue-business││ port: 8081 │ │ port: 8083 │ │ port: 8082 ││ 系统管理/认证 │ │ 代码生成/备份 │ │ 业务服务 ││ DB: system │ │ DB: support │ │ DB: business │└─────────────────┘ └─────────────────┘ └─────────────────┘│ │ │▼ ▼ ▼┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐│ QuickBlue-ai │ │ QuickBlue-report│ │ QuickBlue-admin ││ port: 8084 │ │ port: 8085 │ │ port: 9090 ││ AI Agent+RAG │ │ 报表引擎/BI │ │ Spring Boot Admin ││ DB: ai │ │ DB: report │ │ (监控面板) │└─────────────────┘ └─────────────────┘ └─────────────────────┘
| # | 模块 | 端口 | 数据库 | Java 文件 | 成熟度 |
|---|---|---|---|---|---|
| 1 | QuickBlue-gateway | 8080 | — | 20+ | 🟢 稳定 |
| 2 | QuickBlue-system | 8081 | quickblue_system | 60+ | 🟢 稳定 |
| 3 | QuickBlue-business | 8082 | quickblue_business | 25+ | 🟢 稳定 |
| 4 | QuickBlue-support | 8083 | quickblue_support | 50+ | 🟢 稳定 |
| 5 | QuickBlue-ai | 8084 | quickblue_ai | 40+ | 🟡 部分完整 |
| 6 | QuickBlue-report | 8085 | quickblue_report | 35+ | 🟢 稳定 |
| 7 | QuickBlue-admin | 9090 | — | 5+ | 🟢 稳定 |
| 8 | QuickBlue-common | — | — | 30+ | 🟢 基础库 |
| 9 | QuickBlue-api | — | — | 15+ | 🟢 远程接口(@HttpExchange) |
| 层级 | 技术 | 版本 | 状态 |
|---|---|---|---|
| 框架 | Spring Boot | 3.5.16 | ✅ |
| 微服务 | Spring Cloud | 2025.0.3 | ✅ |
| 微服务 Alibaba | Spring Cloud Alibaba | 2025.0.0.0 | ✅ |
| 网关 | Spring Cloud Gateway | 4.2.x (Boot 3.5) | ✅ |
| 认证 | Sa-Token + JWT + Redis | 1.44.0 | ✅ |
| ORM | MyBatis-Plus + Flyway | 3.5.8 / 11.0.1 | ✅ |
| 数据库 | PostgreSQL | 18 | ⚠️ PG18 |
| 连接池 | Druid | 1.2.25 | ✅ |
| 缓存 | Redis + Redisson | 3.50.0 | ✅ |
| 注册/配置 | Nacos | 2.4.3 | ✅ |
| 消息队列 | RocketMQ Spring Boot Starter | 2.3.1 | ✅ |
| 分布式事务 | Seata | 2.0.0 | 🟡 依赖存在 |
| 链路追踪 | Micrometer Tracing + Brave + Zipkin | 1.4.4 / 6.1.0 | 🟡 默认关闭 |
| 流控降级 | Sentinel | 1.8.8 | ✅ Web 接口限流/系统保护 |
| 弹性 | Resilience4j | 2.1.0 | ✅ RPC 熔断(@HttpExchange 调用) |
| AI | pgvector + OkHttp SSE | 0.5.1 | ✅ |
| 文档 | Knife4j + SpringDoc | 4.6.0 / 2.8.6 | ✅ |
| 内部调用 | @HttpExchange + RestClient(LoadBalancer 负载均衡) | Spring 6.2.x 内置 | ✅ |
| 前端 | Vue 3 + Ant Design Vue 4 | 3.4.27 / 4.2.5 | ✅ |
| 安全 | Argon2id + SM4 国密 + BouncyCastle | 1.80 | ✅ |
v10.0 报告标记了 4 个 P0 修复项为"已完成"。v11.0 重新验证如下:
v10.0 状态: 硬编码 A3f$7cLp#2mN8!zQ 在两处
v11.0 实际代码:
| 文件 | 实现方式 | 状态 |
|---|---|---|
Sm4Util.java | System.getenv("SM4_ENCRYPT_KEY") → 未配置时 throw new IllegalStateException | ✅ 严格 |
ApiEncryptServiceSmImpl.java | @Value("${sm4.encrypt.key}") Spring 注入,无默认值 | ✅ 严格 |
xxxxxxxxxx// Sm4Util.java — 生产环境未配置密钥直接启动失败if (key == null || key.isEmpty()) { throw new IllegalStateException( ">>> [安全错误] SM4加密密钥未配置! 必须通过环境变量 SM4_ENCRYPT_KEY " + "或 JVM 属性 -Dsm4.encrypt.key 注入强随机密钥... <<<" );}评估: 密钥已彻底外置,且启动即校验,杜绝了源码泄露导致密钥暴露的风险。
v10.0 状态: 双 onErrorResume 默认放行
v11.0 实际代码:
x// CustomGatewayProperties.javaprivate boolean authFailOpen = false; // 默认 Fail-Closed
// AuthenticationFilter.java — Token验证异常.onErrorResume(e -> { if (gatewayProperties.isAuthFailOpen()) { // fail-open: 放行 } return buildErrorResponse(exchange, HttpStatus.SERVICE_UNAVAILABLE, 503, ...);})
// AuthenticationFilter.java — Redis查询异常.onErrorResume(e -> { if (gatewayProperties.isAuthFailOpen()) { return Mono.just(true); // 假装Token存在 } return Mono.just(false); // 拒绝请求 → HTTP 503})评估: 默认安全,符合"最小权限"原则。运维可在紧急情况下通过 Nacos 动态切换。
Nacos 共享配置 (postgresql-common.yaml):
xxxxxxxxxxfiltersstat,slf4j,wallfilter wall enabledtrue config multi-statement-allowtrue # Flyway DDL 兼容 comment-allowtrue # 迁移脚本注释 none-base-statement-allowtrue # PostgreSQL 特有语法评估: SQL 注入防护已启用。三个放宽项是为 Flyway 和 PG 语法兼容的合理权衡。
已完成: 28 处 YAML 文件添加 [安全] 注释标记
未完成: .env.example 模板文件未在代码仓库中找到(v10.0 标记为"已创建")
所有模块启动类均通过 EnvLoader.load() 向上查找 .env 文件:
xxxxxxxxxx// 每个模块的 Application.javaEnvLoader.load(); // 从工作目录向上查找 .env → 注入 System PropertiesSpringApplication.run(...);.env 文件缺失影响: 无 .env.example 模板,新开发者不知道需要配置哪些环境变量。
问题: v10.0 及之前版本,代码生成器数据源列表硬编码在 application.yaml,新增数据库需手动修改配置。
v11.0 实现:
xxxxxxxxxx┌──────────────────────────────────────────────────────┐│ CodeGeneratorDbProperties ││ ├── auto-discovery: true (默认) ││ ├── exclude-databases: [template0, template1, postgres]││ └── databases: [...] (手动模式,可选) │└──────────────────┬───────────────────────────────────┘│▼┌──────────────────────────────────────────────────────┐│ CodeGeneratorMultiDbConfig.resolveDatabases() ││ ├── 模式1: 手动配置 (autoDiscovery=false 或 databases 非空)││ └── 模式2: 自动发现 ││ ├── 查询 pg_database WHERE datallowconn=true ││ │ AND datistemplate=false ││ ├── 排除 template0/template1/postgres ││ ├── 内置 5 个中文标签映射 ││ └── quickblue_support 排第一且为默认 │└──────────────────┬───────────────────────────────────┘│▼┌──────────────────────────────────────────────────────┐│ 自动为每个业务库创建独立 DruidDataSource(min=1, max=4) ││ 注册 Bean: codeGeneratorJdbcTemplates + datasourceList│└──────────────────────────────────────────────────────┘
优势:
新增数据库无需改代码/配置,启动即发现
独立小连接池,不干扰主业务数据源
向后兼容:关闭自动发现可回退到手动模式
v10.0 时 Report 模块处于"开发中",v11.0 已达稳定状态:
| 组件 | 文件数 | 功能描述 |
|---|---|---|
| Controller | 4 | 分类/数据源/定义/执行 |
| Service | 4 | 业务逻辑 + EntityComment 辅助 |
| Entity | 4 | 分类/数据源/定义/日志 |
| DAO | 4 | MyBatis-Plus BaseMapper |
| 引擎层 | 20+ | 构建器/数据源/表达式/缓存/SPI/4类导出 |
| 迁移脚本 | 1 | V1.0.0__report_init.sql (8.9 KB, 4 张表) |
核心能力:
报表设计 → 发布 → 执行(同步/预览)
4 类导出: Excel / CSV / HTML / PDF
3 类数据源: JDBC / API / Static
SPI 插件体系: DataProvider / ChartRenderer / Exporter / ExpressionFunction
表达式引擎: 跨行/跨列计算、聚合
缓存: 30min / 10min 双 TTL
异步日志: RocketMQ 发送 + 降级同步保存
权限: 管理员拥有全部 17 个权限,非管理员权限查询标记为 "TODO 待实现细粒度权限查询"
| 修复项 | 修复前 | 修复后 |
|---|---|---|
| 校验失败闪烁 | loading=true → 校验失败 → 瞬间 loading=false,按钮闪一下"请稍候" | 校验通过后才 loading=true,失败不回显 |
| 登录成功闪烁 | finally 中 loading=false → 按钮变"登录" → 然后跳转 | 成功时 loading 不重置,按钮持续显示"请稍候"直到页面跳转 |
| 按钮文案 | "登录中"(与按钮"登录"语义重复) | "◌ 请稍候"(通用 loading 表达) |
| 模块 | 功能完整度 | 代码规范 | 安全加固 | 测试覆盖 | 文档 | 综合 |
|---|---|---|---|---|---|---|
| gateway | ████████░░ 85% | ████████░░ 85% | ███████░░░ 75% | ░░░░░░░░░░ 0% | ██████░░░░ 60% | 🟢 80 |
| system | █████████░ 95% | ████████░░ 85% | ████████░░ 80% | ░░░░░░░░░░ 0% | ██████░░░░ 60% | 🟢 82 |
| business | ██████░░░░ 65% | ████████░░ 80% | ███████░░░ 70% | ░░░░░░░░░░ 0% | █████░░░░░ 50% | 🟢 70 |
| support | ████████░░ 85% | ████████░░ 85% | ████████░░ 80% | ░░░░░░░░░░ 0% | ██████░░░░ 65% | 🟢 81 |
| ai | ████████░░ 75% | ████████░░ 85% | ███████░░░ 70% | ░░░░░░░░░░ 0% | █████░░░░░ 50% | 🟢 75 |
| report | ████████░░ 85% | █████████░ 90% | ██████░░░░ 65% | ░░░░░░░░░░ 0% | ████░░░░░░ 45% | 🟢 75 |
| common | ████████░░ 80% | █████████░ 90% | ████████░░ 80% | ░░░░░░░░░░ 0% | ██████░░░░ 60% | 🟢 80 |
| admin | ████████░░ 80% | ████████░░ 80% | █████░░░░░ 55% | ░░░░░░░░░░ 0% | ████░░░░░░ 40% | 🟢 70 |
| 模式 | 模块 | 特点 |
|---|---|---|
| 纯 Write | business | 业务表单 + 流程,表驱动 |
| 纯 Read | report | 报表读取,无业务写入 |
| Write+Read | system, support, ai | 配置管理 + 查询 |
| 基础设施 | gateway, admin, common | 路由/监控/基础库 |
| 文件 | 方法 | 当前状态 |
|---|---|---|
AgentController.java | list() | 返回 ResponseDTO.ok() 无数据 |
AgentController.java | create() | 返回"创建成功"无实际保存 |
AgentController.java | update() | 返回"更新成功"无实际更新 |
AgentController.java | delete() | 返回"删除成功"无实际删除 |
AiragSessionServiceImpl.java | getMessagesBySessionId() | 返回 List.of(),注释"需要 AiragMessageMapper" |
AiragSessionServiceImpl.java | saveMessage() | 仅打印日志,注释"需要 AiragMessageMapper" |
V5__init_ai_schema.sql | 整个文件 | 空文件 (0 B) |
V9__unify_snowflake_id.sql | 整个文件 | 空文件 (0 B) |
已完善的功能: ChatController (同步+SSE)、AiragApp CRUD、AiragKnowledge CRUD、AiragModel CRUD、Agent 发布/启用/禁用/执行/流式执行
| 检查项 | 状态 | 详情 |
|---|---|---|
| 密码算法 | ✅ 优秀 | Argon2id + 自定义盐值 |
| 国密加密 | ✅ 已修复 | SM4 密钥从环境变量注入,启动校验 |
| JWT 持久化 | ✅ 良好 | Sa-Token JWT + Redis 持久化 |
| RBAC 权限 | ✅ 完善 | 6 张权限表,含数据权限规则 |
| 数据权限 | ✅ 创新 | @DataScope 注解 + SQL 注入规则 |
| 会话管理 | ✅ 良好 | 在线用户管理 + 强制下线 |
| 三级等保 | ✅ 完善 | 双因子认证/密码复杂度/文件检测/定期改密 |
| Gateway 鉴权 | ✅ 已修复 | Fail-Closed 默认拒绝 |
| Token 续期 | ⚠️ 未实现 | 当前无静默续期,Token 过期需重新登录 |
| 检查项 | 状态 | 风险等级 | 详情 |
|---|---|---|---|
| Gateway CORS | ✅ 已加固 | 🟢 低 | CORS_ALLOWED_ORIGINS 环境变量 + allowCredentials 默认 false |
| AI 模块 CORS | 🔴 硬编码 | 🟠 中 | allowedOriginPatterns("*") + allowCredentials(true) 硬编码在 SseConfig.java |
| Admin 模块 CORS | 🔴 硬编码 | 🟠 中 | allowedOriginPatterns("*") + allowCredentials(true) 硬编码在 AdminSecurityConfig.java |
| CSRF | 🔴 已禁用 | 🟡 低 | Admin 模块 csrf.disable(),SaaS 后台无 Cookie 场景影响较小 |
| XSS | 🔴 缺失 | 🟠 中 | 全项目无 XSS 过滤器,未使用 Jsoup |
| HTTPS | ⚠️ 待确认 | 🟡 中 | 配置文件中未见强制 HTTPS 配置 |
| 检查项 | 状态 | 风险等级 | 详情 |
|---|---|---|---|
| SQL 注入 | ✅ 已防护 | 🟢 低 | Druid WallFilter 启用 + MyBatis-Plus 参数化查询 |
| 敏感数据加密 | ✅ 良好 | 🟢 低 | SM4 传输加密 + Argon2id 存储加密 |
| 日志脱敏 | ⚠️ 部分 | 🟡 中 | 启动日志打印配置摘要,需确认不泄露密码 |
| 文件上传 | ✅ 良好 | 🟢 低 | 等保模块含文件检测 |
| 数据库备份 | ✅ 良好 | 🟢 低 | support 模块含 pg_dump 备份工具 |
xxxxxxxxxx# postgresql-common.yaml Nacos 共享配置filtersstat,slf4j,wallfilter wall enabledtrue config multi-statement-allowtrue # ⚠️ 放宽:允许多语句 comment-allowtrue # ⚠️ 放宽:允许注释 none-base-statement-allowtrue # ⚠️ 放宽:PG 特有语法| 放宽项 | 风险 | 必要性 | 建议 |
|---|---|---|---|
multi-statement-allow | 🟠 批处理注入 | Flyway 迁移脚本 | Flyway 完成后可考虑关闭 |
comment-allow | 🟢 低 | 迁移脚本注释 | 可接受 |
none-base-statement-allow | 🟢 低 | PG :: 类型转换 | 可接受 |
| 项目 | 状态 |
|---|---|
EnvLoader.java (加载逻辑) | ✅ 已实现 — 从工作目录向上查找 .env |
EnvFileEnvironmentPostProcessor | ✅ 已注册 — 各模块 META-INF/spring 中 |
.env 文件 | ❌ 不存在(合理,不提交到仓库) |
.env.example 模板 | ❌ 缺失 — v10.0 标记为"已创建"但文件中未找到 |
| 技术 | 版本 | 状态 |
|---|---|---|
| Vue | 3.4.27 | ✅ |
| Vue Router | 4.3.2 | ✅ |
| Pinia | 2.1.7 | ✅ |
| Ant Design Vue | 4.2.5 | ✅ |
| Vite | 5.2.12 | ✅ |
| Axios | 1.6.8 | ✅ |
| ECharts | 5.4.3 | ✅ |
| ApexCharts | 5.3.6 | ✅ |
| WangEditor (next) | 5.6.34 | ✅ |
| html2pdf.js | 0.10.1 | ✅ |
| xlsx | 0.18.5 | ✅ |
| SM-Crypto (国密) | 0.3.13 | ✅ |
| Day.js | 1.11.13 | ✅ |
| vue-i18n (国际化) | 9.13.1 | ✅ |
| Lodash | 4.17.21 | ✅ |
xxxxxxxxxx/ (重定向到 /home)├── /login → 登录页├── /home → 首页仪表盘├── /account → 个人中心├── /install → 安装向导├── /code-generator-wizard → 代码生成向导├── /report/* → 报表模块 (管理/设计器/预览/查看器/数据源)├── /help-doc → 帮助文档├── /change-log → 更新日志└── 动态路由 → 从后端菜单数据 buildRoutes() 懒加载
| 检查项 | 状态 | 备注 |
|---|---|---|
| 组件懒加载 | ✅ | import.meta.glob 动态导入 |
| keep-alive | ✅ | 报表管理页/数据源页缓存 |
| 登录 UX | ✅ 已优化 | loading 状态流畅,无闪烁 |
| 路由守卫 | ✅ | Token 校验 + 动态路由构建 |
| 错误处理 | ✅ | 404/403 兜底 + axios 拦截器 |
| 响应式 | ⚠️ 未验证 | 缺少移动端适配说明 |
| 国际化 | ❌ 缺失 | 依赖 vue-i18n 已安装,但无实际 i18n 配置和语言包 |
| 数据库 | 用途 | 模块 | 迁移脚本 |
|---|---|---|---|
quickblue_system | 用户/角色/菜单/部门/租户 | system | 已迁移 |
quickblue_support | 代码生成器/备份/配置 | support | 已迁移 |
quickblue_business | 业务表单/流程 | business | 已迁移 |
quickblue_ai | AI 对话/知识库/Agent | ai | V5/V9 为空 |
quickblue_report | 报表/分类/数据源/日志 | report | V1.0.0 |
| 组件 | 作用 | 版本 | 高可用 | 备注 |
|---|---|---|---|---|
| PostgreSQL 18 | 主存储 | 18 | ❌ 单点 | PG18 非 Flyway 官方支持 |
| Redis | 缓存+Session+分布式锁 | 7.x | ❌ 单点 | Redisson 3.50.0 |
| Nacos | 注册中心+配置中心 | 2.4.3 | ❌ 单点 | 集群模式未配置 |
| RocketMQ | 异步日志/pgvector同步 | 2.3.1 | ❌ 单点 | Spring Boot Starter |
| Sentinel | 流控降级 | 1.8.8 | ✅ 仪表盘 | Nacos 持久化规则 |
| Seata | 分布式事务 | 2.0.0 | ❌ 未启用 | 依赖存在但无配置 |
| 组件 | PG18 兼容 | 风险 |
|---|---|---|
| Spring Boot 3.5.16 | ✅ | 通过 JDBC 驱动透明 |
| Druid 1.2.25 | ✅ | JDBC 层兼容 |
| Flyway 11.0.1 | ⚠️ | 官方仅支持到 PG17 |
| pgvector 0.5.1 | ✅ | 有 PG18 构建 |
| MyBatis-Plus 3.5.8 | ✅ | JDBC 层兼容 |
Flyway 是唯一风险点,但实测可用,官方预计后续版本加入 PG18 支持。
| # | 能力 | 评分 | 说明 |
|---|---|---|---|
| 1 | API 网关 | 9/10 | 路由/鉴权/限流/CORS 均实现;HTTPS 未强制 |
| 2 | 服务注册发现 | 8/10 | Nacos 正常;集群模式未配置 |
| 3 | 负载均衡 | 8/10 | Spring Cloud LoadBalancer,未配置权重 |
| 4 | 配置中心 | 9/10 | Nacos 共享+独享,.env 加载器完善 |
| 5 | 熔断降级 | 7/10 | Sentinel 依赖存在,规则部分落地 |
| 6 | 限流 | 8/10 | Gateway 路由级限流,report-exec: 100/200 |
| 7 | 数据库 | 8/10 | 多库多租户,备份工具完善 |
| 8 | 缓存 | 8/10 | Redis 多 DB 隔离,Redisson 3.50.0 分布式锁 |
| 9 | 消息队列 | 7/10 | RocketMQ 异步日志+向量同步 |
| 10 | 分布式事务 | 5/10 | Seata 2.0.0 依赖存在,无配置 |
| 11 | 链路追踪 | 5/10 | Micrometer Tracing + Zipkin 集成但默认关闭 |
| # | 能力 | 评分 | 说明 |
|---|---|---|---|
| 1 | 模块化设计 | 9/10 | 9 模块 + common 分层,职责清晰 |
| 2 | 多租户 | 8/10 | 租户表 + Sa-Token 多账号体系 |
| 3 | 插件体系 | 8/10 | Report SPI + 策略模式 |
| 4 | 数据源扩展 | 9/10 | 代码生成器自动发现 + 独立连接池 |
| 5 | 内部调用 | 8/10 | @HttpExchange + RestClient + LoadBalancer |
| 6 | 弹性 | 7/10 | Resilience4j 2.1.0(RPC 熔断)+ Sentinel 1.8.8(Web 限流) |
| 7 | 国际化 | 4/10 | vue-i18n 已装,后端+前端无完整多语言 |
| # | 能力 | 评分 | 说明 |
|---|---|---|---|
| 1 | 认证 | 9/10 | Sa-Token JWT + Redis,Token 续期缺失 |
| 2 | 授权 | 8/10 | RBAC + 数据权限双体系 |
| 3 | 传输加密 | 7/10 | SM4 国密,HTTPS 未强制 |
| 4 | 存储加密 | 9/10 | Argon2id,已彻底外置 SM4 密钥 |
| 5 | SQL 注入防护 | 8/10 | WallFilter 启用,有 3 项放宽 |
| 6 | CORS 安全 | 5/10 | Gateway 已加固,AI/Admin 仍硬编码 |
| 7 | XSS 防护 | 2/10 | 无专用过滤器 |
| 8 | CSRF 防护 | 2/10 | Admin 模块显式禁用 |
| 9 | 日志安全 | 6/10 | 启动日志可能输出配置摘要 |
| 10 | 三级等保 | 9/10 | 双因子/密码复杂度/文件检测/定期改密 |
| # | 能力 | 评分 | 说明 |
|---|---|---|---|
| 1 | 健康检查 | 8/10 | Actuator + Spring Boot Admin |
| 2 | 日志 | 7/10 | SLF4J + Logback,统一格式 |
| 3 | 链路追踪 | 3/10 | 默认关闭,未推广 |
| 4 | 指标监控 | 6/10 | Druid 监控页 + Sentinel 仪表盘 |
| 5 | 告警 | 3/10 | 无配置化告警规则 |
| 6 | 审计日志 | 6/10 | Sa-Token 登录日志,操作审计部分 |
| # | 能力 | 评分 | 说明 |
|---|---|---|---|
| 1 | 代码规范 | 8/10 | Lombok/注解统一,少量 TODO 桩代码 |
| 2 | 单元测试 | 0/10 | 无测试文件 |
| 3 | 集成测试 | 0/10 | 无测试文件 |
| 4 | CI/CD | 4/10 | 无配置(仅 Maven 编译脚本) |
| 5 | API 文档 | 8/10 | Knife4j 全模块覆盖 |
| 6 | 数据库版本管理 | 7/10 | Flyway 各模块独立,AI 为空脚本 |
| 7 | 配置管理 | 8/10 | Nacos + .env 双重机制 |
| # | 风险项 | 严重度 | 概率 | 风险等级 | 发现版本 | 状态 |
|---|---|---|---|---|---|---|
| R1 | CORS 硬编码 — AI/Admin 模块 * + credentials:true | 🟠 中高 | 中 | 🔴 需修复 | v9.0 | ❌ 三版本未修复 |
| R2 | XSS 缺失 — 无输入/输出过滤 | 🟠 中高 | 低 | 🟠 中 | v9.0 | ❌ 三版本未修复 |
| R3 | AI 桩代码 — Agent CRUD / 会话消息 TODO | 🟡 中 | 高 | 🟠 中 | v10.0 | 🟡 无变化 |
| R4 | AI 空迁移脚本 — V5/V9 为 0B 空文件 | 🟡 中 | 中 | 🟠 中 | v10.0 | ❌ 无变化 |
| R5 | Report 权限 — 非管理员无细粒度权限 | 🟡 中 | 中 | 🟠 中 | v11.0 | 🆕 发现 |
| R6 | 测试覆盖 — 全项目 0% 测试 | 🟠 中高 | — | 🟠 中 | v9.0 | ❌ 三版本未修复 |
| R7 | 中间件单点 — PG/Redis/Nacos/RocketMQ 单节点 | 🟠 中高 | 低 | 🟡 低 | v9.0 | ❌ 基础设施 |
| R8 | Token 续期 — 无静默刷新 | 🟡 中 | 中 | 🟡 低 | v9.0 | ❌ 未实现 |
| R9 | CI/CD — 无自动化流水线 | 🟡 中 | — | 🟡 低 | v9.0 | ❌ 未配置 |
| R10 | .env.example 缺失 — 新人不知环境变量 | 🟢 低 | 高 | 🟢 低 | v11.0 | 🆕 发现 |
| # | 改进项 | 影响 | 工作量 | 优先级 |
|---|---|---|---|---|
| 1 | CORS 安全加固 — AI/Admin 模块 CORS 改为环境变量注入,移除硬编码 * + allowCredentials | 安全风险 | 0.5d | 🔴 极高 |
| 2 | XSS 过滤器 — Gateway 或各模块添加 WebFlux 兼容的 XSS 过滤器 | 安全加固 | 1d | 🔴 高 |
| 3 | AI Agent CRUD 完善 — 实现 list/create/update/delete + Session 消息存储查询 | AI 功能完整性 | 2d | 🔴 高 |
| 4 | AI 迁移脚本 — 填写 V5/V9 实际 SQL,创建相关表 | 数据一致性 | 1d | 🔴 高 |
| 5 | 创建 .env.example — 列出所有必需环境变量和说明 | 开发者体验 | 0.5d | 🟠 中高 |
| 6 | Report 权限完善 — 实现 ReportStpInterface 非管理员权限查询 | 权限安全 | 1d | 🟠 中高 |
| 7 | Token 静默续期 — 免打扰的 Token 刷新机制 | 用户体验 | 1d | 🟠 中 |
| 8 | 中间件高可用 — PG 主从、Redis Sentinel、Nacos 集群 | 基础设施 | 5d | 🟡 中 |
| 9 | 核心模块单元测试 — system/support 核心 Service 测试 | 工程质量 | 3d | 🟡 中 |
| 10 | CI/CD 流水线 — Jenkins/GitHub Actions 编译+部署 | 效率 | 3d | 🟡 中 |
| 优先级 | 改进项 | 理由 |
|---|---|---|
| 1 | CORS 安全加固 | AI/Admin 两处硬编码,修复成本低(0.5d),安全收益高 |
| 2 | AI Agent CRUD 完善 | 桩代码已存在两个版本,影响功能交付(2d) |
| 3 | 创建 .env.example | 降低新人上手门槛,支持 SM4/Gateway 安全配置推广(0.5d) |
| 维度 | v10.0 | v11.0 | 变化 |
|---|---|---|---|
| 架构完整性 | 85 | 89 | +4 (Report 稳定 + 框架大版本升级) |
| 安全性 | 65 | 75 | +10 (4 项 P0 验证通过) |
| 可用性 | 82 | 86 | +4 (自动发现 + Seata 引入 + UX 优化) |
| 可观测性 | 75 | 85 | — |
| 工程质量 | 45 | 48 | +3 (配置管理改进) |
| 综合 | 66 | 71 | +5 |
技术栈大版本升级 — Spring Boot 3.5.16 + Spring Cloud 2025.0.3 + Spring Cloud Alibaba 2025.0.0.0,从 3.2.x 跨越 2 个大版本
v10.0 四项 P0 安全修复全部落地且验证通过 — SM4 密钥外置、Gateway Fail-Closed、Druid WallFilter、密码标记
代码生成器自动发现 — 突破性改进,消除硬编码维护负担
Report 报表模块完整 — 从"开发中"到功能完善的 BI 引擎
三级等保体系 — 双因子认证、密码复杂度、文件检测齐全
EnvLoader 机制 — 统一的 .env 加载,支持多策略查找
基础设施升级 — Sa-Token 1.44.0、Druid 1.2.25、MyBatis-Plus 3.5.8、Nacos 2.4.3等全面升级
CORS 安全 — 三版本未修复,AI/Admin 仍硬编码不安全配置
XSS 缺失 — 三个版本无任何 XSS 防护
AI 模块半成品 — Agent CRUD 桩代码 + 空迁移脚本,影响交付
测试覆盖 0% — 随着代码规模增长,缺乏自动化验证的风险在放大
中间件单点 — 所有中间件单节点运行,无高可用方案
建议 v12.0 聚焦:
CORS 全面加固(AI + Admin)
AI Agent CRUD 完成 + 迁移脚本实施
核心模块 Service 单元测试起步
Token 静默续期
启动"一切皆插件"架构演进 — 建立 PluginRegistry 内核 + 工具域试点,为 AI 能力统一收口(详见第 12 章)
本章为前瞻性规划章节,参考 DeepSeek Harness(DSH)的"一切皆插件"架构思想,分析其对 QuickBlue 的适配性、核心理论提炼与渐进式整合路线。本章内容不包含任何代码改动承诺,仅作为 v12.0 起架构演进的指导方针。
v11.0 评估显示 AI 能力面持续膨胀(模型、工具、技能、检索、Agent 循环、会话、沙箱、调度、观测),但现有扩展机制分散、各自为政:
| # | 扩展点 | 现有实现 | 形态 | 与插件模型的差距 |
|---|---|---|---|---|
| 1 | 模型 | ChatModelFactory + ChatModelFactoryManager | 策略模式,6 大供应商 | 编译期装配,无运行时热插拔 |
| 2 | 工具 | ToolRegistry + airag_tool 表 | builtin/http/script 三态 | 最接近热插拔,但仅限工具域 |
| 3 | Agent 循环 | AgentScopeService + ObservabilityMiddleware | 5 个中间件钩子 | 仅覆盖 AgentScope 单域 |
| 4 | 代码生成器 | CodeGeneratorTemplateService + 16 个 *VariableService | map 注册 | 最像"插件表"的现成范本 |
| 5 | RAG 检索 | RetrieverFactory + SimpleRetriever | 工厂 + 实现 | 检索实现仍为 TODO,未收口 |
| 6 | 技能 | — | — | 空白 |
| 7 | 沙箱 | — | — | 空白 |
| 8 | 会话事件流 | AiragSessionServiceImpl | 桩代码 | 空白 |
| 9 | 流程编排 | LiteFlow 依赖 + airag_flow 表 | 已建表零接入 | 资产闲置 |
核心矛盾:能力的增长方式不可控——新增一种能力需要改动既有 Service/工厂/表结构,多租户差异化更是无从谈起。
DSH 是什么:DeepSeek 官方的 Agent 开发运行时(Node/TS),核心主张"一切皆插件"——模型、工具、技能、会话、沙箱、存储、循环、调度、UI 九大类能力全部以插件形态存在。
内核:Cordis 元框架,其核心理论可提炼为三点:
插件一等公民 — 能力即插件,插件即模块化的最小单位;内核不关心插件内部逻辑,只关心插件的生命周期与装配
内核只做编排 — 插件生命周期管理(加载 / 启用 / 禁用 / 卸载) + 依赖声明与解析(显式 deps,拓扑排序装配) + 可逆效果(每个插件提供逆操作,卸载时完整回滚副作用)
组合优于继承 — 能力集由"装配了哪些插件"决定,而非"继承了哪个基类";同一能力可多实例、可按租户差异化组合
与 Spring 原生机制的区别:Spring SPI / Starter 本质是编译期装配 + 启动时一次性生效;Cordis 强调运行时热插拔 + 可逆卸载,这是 QuickBlue 当前缺失的关键能力。
| 路径 | 方案 | 结论 |
|---|---|---|
| A:直接移植 DSH | 将 Node/TS 插件运行时嵌入 Spring 生态 | ❌ 不可行 — 技术栈隔离(TS/Node vs Java/Spring),Cordis 无 JVM 官方端口,双运行时维护成本极高 |
| B:Java 侧复刻 Cordis 范式(推荐) | 自研轻量 PluginRegistry,提炼三条核心理论落地 | ✅ 可行 — 内核保持 300~500 行,只做生命周期 / 依赖解析 / 可逆回滚,不做重型框架 |
| C:sidecar 混合 | DSH 作为可选推理引擎,通过 MCP / HTTP 桥接 | 🟡 可选 — 仅在需要深度 Agent 编排的租户场景启用,不作为主架构 |
推荐路径 B:收益与风险比最优——不引入第二运行时,复用 Spring 生态,且 9 大能力统一收口为 SPI 后,未来若需接入 DSH 也只需实现一个 Adapter。
xxxxxxxxxx// 设计草案(仅示意,不在本版本实现)public interface Plugin { String name(); // 全局唯一 void setup(PluginContext ctx); // 装配:注册模型/工具/监听器等 List<String> deps(); // 依赖声明 void dispose(); // 逆操作:可逆回滚}
// PluginRegistry:注册 → 启用 → 禁用 → 卸载// ├── DependencyResolver 依赖拓扑排序解析// └── RollbackExecutor 装配失败时回滚已生效插件兼容策略(关键原则):既有 ChatModelFactoryManager、ToolRegistry、RetrieverFactory 等不推倒重来,而是通过 Adapter 桥接为"内置插件",收敛到单一注册口。存量代码零破坏,逐步迁移。
| 收益 | 说明 |
|---|---|
| 统一注册机制 | 5 处散落 map/工厂收敛为单一 PluginRegistry,消除各自为政 |
| 真热插拔 | 运营期动态启用/禁用能力,无需发版即可调整 Agent 能力面 |
| 插件级可观测 | Trajectory 记录每个插件的执行轨迹,问题定位到插件粒度 |
| 租户级组合 | 按租户装配不同插件集,SaaS 差异化能力交付 |
| 盘活 LiteFlow 资产 | airag_flow 表 + 流程引擎与插件编排融合,流程即插件组合 |
| 降低接入成本 | 新增能力 = 新增一个 Plugin 实现类,无需改动既有 Service |
| 阶段 | 版本 | 目标 | 范围 |
|---|---|---|---|
| 0 | v12.0 | 存量收尾 + 内核奠基 | 完成存量 P0(CORS/XSS/AI CRUD);定义 Plugin SPI 规范 + PluginRegistry 骨架(生命周期/依赖解析/回滚) |
| 1 | v12.1 | 工具域试点 | ToolRegistry → Plugin 化,airag_tool 作为插件存储层,运行期动态启停验证 |
| 2 | v12.2 | 模型 + 检索 | ChatModelFactoryManager、RetrieverFactory 桥接接入,模型/检索可按插件配置切换 |
| 3 | v13.x | 能力全收口 | 补齐技能 / 会话事件流 / 沙箱空白,Agent 循环统一收口 |
| 4 | v14.x | 编排与产品化 | 租户级插件编排 + 管理 UI + LiteFlow 流程融合 |
各阶段验收标准:
阶段 1:工具插件可运行期动态启用/禁用,且不回归现有 Chat / Agent 调用链路
阶段 2:模型 / 检索通过插件配置切换,无硬编码 switch 分支
阶段 3:新能力接入仅需实现 Plugin 接口,业务代码零改动
阶段 4:租户可在管理端自助组合 Agent 能力集,插件生命周期全程可视化
| 风险 | 对策 |
|---|---|
| 过度设计 / 重框架化 | 内核严格控制在 300~500 行,先试点(工具域)后推广,宁缺毋滥 |
| 热插拔并发问题 | 插件状态机 + 启用/禁用期间请求排空,规避状态不一致 |
| 与 Spring 生态割裂 | 插件内部自由使用 Spring Bean,PluginRegistry 只做编排不接管容器 |
| 迁移成本失控 | 全部走 Adapter 桥接逐步替换,禁止一次性重写 |
| # | 事项 | 工作量 | 优先级 |
|---|---|---|---|
| 1 | 定义 Plugin SPI 与生命周期规范(纯设计文档,先行评审) | 0.5d | 🔴 高 |
| 2 | PluginRegistry 内核骨架:生命周期 + 依赖解析 + 可逆回滚 | 2d | 🔴 高 |
| 3 | 工具域试点:ToolRegistry 首个 Plugin Adapter + 运行期启停验证 | 1d | 🟠 中高 |
| 4 | 存量 P0(CORS / XSS / AI CRUD)先行收尾 | 见 10.2 | 🔴 高 |
说明:v12.0 的插件部分以"设计 + 试点"为主,不追求一步到位的全量改造;全量收口按 12.6 路线分阶段推进,每阶段均可独立验收、独立回退。
报告生成: QuickBlue 架构评估组
技术栈: Spring Boot 3.5.16 + Spring Cloud 2025.0.3 + Spring Cloud Alibaba 2025.0.0.0 + PostgreSQL 18 + JDK 21 + Vue 3.4
项目版本: QuickBlue 4.0.0