§1 执行摘要
L1 项目画像
| 项目名 | Open-Bank 开放银行平台(某软件供应商 / 某开放银行平台) |
| 业务定位 | ⚠️ 金融开放API平台 - 对外提供银行能力开放、API管理、开发者生态、沙箱测试等能力 |
| 技术代际 | 2018-2020 年代(Spring Boot 2.1 + Spring Cloud Gateway + Dubbo + Vue 2.5) |
| 代码规模 | ~500 个 Java 文件 + ~700 个前端文件(Vue/JS),总估算 ~150,000+ 行代码 |
| 数据库 | MySQL(主库 fop)+ MongoDB(日志/文档)+ Redis(缓存)+ Elasticsearch(日志检索) |
| 子项目数 | 6 个独立 Maven/Vue 项目(fop-parent / fop-api-gateway / fop-portal-devcommunity / ijep-clouds-services / openportal / jepWeb) |
| 当前状态 | 维护期/半活跃 — 技术栈较新但仍有多处安全隐患和未完成功能 |
| 信息丢失程度 | 中等——有 README 和部分配置文档,但缺少 API 文档、数据库设计文档、部署文档 |
L1 关键数字速览
L1 风险速览表
| 等级 | 风险项 | 说明 |
| 严重 | 硬编码凭证 | 多环境配置中存在明文数据库密码、Redis 无认证、加密密钥硬编码 |
| 严重 | 动态日志级别修改 | FopController 提供公开的 /level 接口可动态修改 Logback 日志级别(安全漏洞) |
| 严重 | Fastjson 反序列化 | Fastjson 1.2.68 存在已知反序列化 RCE 漏洞风险 |
| 高 | Shiro 版本过旧 | fop-portal 使用 Shiro 1.3.2,存在 CVE-2016-4437 认证绕过风险 |
| 高 | SQL 注入风险 | 部分 DAO 层使用字符串拼接构建 SQL,存在注入隐患 |
| 高 | 无单元测试 | 未发现 JUnit/TestNG 测试代码,缺乏自动化测试保障 |
| 低 | 调试残留代码 | 多处 System.out.println 和 e.printStackTrace() 用于调试输出 |
L1 报告置信度声明
置信度声明:本报告基于静态代码分析,未运行系统。L1 层(事实清单)置信度 ~92%;L2 层(机制分析)~88%;L3 层(规则提取)~75%;L4 层(业务解读)~55% 结论需业务专家验证。部分推断基于字段命名和行业通用做法。
L2 技术实现关键发现
- 微服务混合架构:采用 Spring Cloud Gateway(API网关)+ Dubbo RPC(内部服务调用)的混合架构模式,网关负责统一入口、路由、限流熔断,内部服务通过 Dubbo 高性能通信
- 前后端分离:开放门户(openportal Vue + Element UI)和管理控制台(jepWeb Vue + iView)完全独立,通过 RESTful API 与后端交互
- 多数据源支持:同时使用 MySQL(关系型业务数据)、MongoDB(文档/日志)、Redis(缓存/Session)、Elasticsearch(日志检索)四种存储引擎
- 国密算法集成:已集成 SM2 国密加密算法(SM2Utils.java),符合金融行业安全合规要求
- 消息队列双轨:同时集成 RabbitMQ 和 ActiveMQ,分别用于不同业务场景的消息处理
L3 业务规则关键发现
- API 生命周期管理:完整的 API 注册→审核→发布→下线流程,含版本管理(version 字段)[B级: FopApiBookPo.java]
- 应用接入审核:开发者创建应用需经管理员审核,审核通过后才可获得 appKey/appSecret 调用 API[B级: FopAppBookPo.java]
- 分级限流策略:基于 Sentinel 实现应用级/API 级限流熔断,支持 QPS 并发数限制[B级: Gateway Filter]
- 交易日志全链路:TranLogFilter 记录每次 API 调用的完整请求/响应日志,用于审计追溯[B级: TranLogFilter.java]
- 开发者社区:内置开发者论坛/问答/文档中心功能,形成开放生态[B级: fop-portal-devcommunity]
业务规则覆盖率:完整 65% | 部分 20% | 缺失 15%
L4 业务域关键发现
- 核心能力⚠️:API 管理(注册/发布/版本/下线)、应用管理(接入/审核/密钥)、开发者管理(注册/认证/权限)、产品管理(金融产品打包)、计费管理(按调用量/套餐)、沙箱测试(模拟环境)、文档中心(API 文档/SWDemo)
- 能力缺口⚠️:缺少完善的 API 监控告警(仅有基础日志)、缺少自动化测试框架集成、缺少 API 市场商业化运营功能(推荐/评分/评论)
- 合规风险⚠️:存在动态日志级别修改接口(可被利用进行信息泄露)、部分敏感操作无二次确认、审计日志存储周期不明确
- 技术债务⚠️:Dubbo 版本较旧(Alibaba 2.x 未升级至 Apache 3.x)、Spring Boot 2.1.x 接近 EOL、前端 Vue 2 已停止维护
§2 项目概述与业务定位
L1 技术代际与规模
| 技术代际判断 | 2018-2020 年(Spring Boot 2.1.3 / Spring Cloud Gateway 2.1.1 / Vue 2.5 均为 2019-2020 主流版本) |
| 代码规模 | ~150,000+ 行(Java ~80,000 行 + 前端 Vue/JS ~70,000 行) |
| 业务行 vs 框架行 | 业务代码约 60% / 框架基础设施代码约 40% |
| 系统数量与关系 | 6 子系统微服务架构——网关(fop-api-gateway:8188) + 核心服务(fop-parent) + 开发者门户(fop-portal) + 云服务(ijep-clouds) + 开放前台(openportal) + 管理后台(jepWeb) |
| 数据库 | MySQL(主库 fop)+ MongoDB(文档/日志)+ Redis(缓存)+ Elasticsearch(日志检索) |
| 中间件 | RabbitMQ + ActiveMQ(消息队列)+ ZooKeeper(Dubbo注册中心)+ FastDFS(文件存储) |
| 当前状态 | 维护期/半活跃 — 技术栈较新但存在安全隐患和多处技术债务 |
L1 子项目清单
| 子项目 | 类型 | 端口 | 职责 | 技术栈 |
| fop-parent | Java/Maven | Jetty内嵌 | 核心业务服务层(公共模块+平台服务+Dubbo Provider) | Spring 4.1.6 + MyBatis + Dubbo + Jetty |
| fop-api-gateway | Java/Maven | 8188 | API 网关(统一入口/路由/限流/OAuth2/Dubbo调用) | Spring Boot 2.1.3 + Spring Cloud Gateway + Sentinel + OAuth2 |
| fop-portal-devcommunity | Java/Maven | 自定义 | 开发者门户后端(用户认证/WebSocket/文件上传/Dubbo代理) | Spring Boot 2.1.6 + Shiro 1.3.2 + Thymeleaf + WebSocket |
| ijep-clouds-services | Java/Maven | 多端口 | 云微服务套件(FOP/BPM/SYS/Console 四个子模块) | Spring Cloud + Spring Security + MongoDB + Elasticsearch |
| openportal | Vue/Webpack | Nginx | 开放平台门户前台(首页/API市场/开发者中心/文档) | Vue 2.5 + Element UI + Mint UI + Vuex + ECharts |
| jepWeb | Vue/Webpack | Nginx | 运营管理控制台(Dashboard/系统管理/FOP管理/BPM工作流) | Vue 2.5 + ViewUI(iView) + ECharts + Webpack 3 |
L1 系统边界图
flowchart LR
subgraph 用户
U1[外部开发者]
U2[合作机构]
U3[运营管理员]
U4[系统管理员]
end
subgraph 前端层["前端展示层"]
OP["openportal
开放门户前台
Vue 2.5 + Element UI"]
JW["jepWeb
管理控制台
Vue 2.5 + iView"]
DP["devcommunity
开发者门户
Thymeleaf"]
end
subgraph 网关层["API 网关层 :8188"]
GW["fop-api-gateway
Spring Cloud Gateway
路由/限流/OAuth2/Dubbo代理"]
end
subgraph 服务层["核心服务层"]
PS["fop-platform-service
业务逻辑/Dubbo Provider
MyBatis/Jetty"]
FS["ijep-clouds-fop-service
FOP REST/ES日志查询"]
BS["ijep-clouds-bpm-service
BPM工作流引擎客户端"]
SS["ijep-clouds-sys-service
系统管理/数据字典"]
end
subgraph 外部依赖["外部系统/中间件"]
DB1[(MySQL
主库)]
DB2[(MongoDB
文档库)]
RD[(Redis
缓存)]
ES[(Elasticsearch
日志检索)]
MQ1[(RabbitMQ
消息队列)]
MQ2[(ActiveMQ
BPM消息)]
ZK[(ZooKeeper
Dubbo注册中心)]
FS2[(FastDFS
文件存储)]
end
U1 -->|浏览器| OP
U2 -->|浏览器| OP
U3 -->|浏览器| JW
U4 -->|浏览器| JW
U1 -->|浏览器| DP
OP -->|REST API| GW
JW -->|REST API| GW
DP -->|HTTP/Dubbo| GW
GW -->|Dubbo RPC| PS
GW -->|HTTP REST| FS
GW -->|HTTP REST| BS
GW -->|HTTP REST| SS
PS --> DB1
PS --> RD
PS --> MQ1
PS --> ZK
FS --> ES
SS --> DB2
BS --> MQ2
DP --> FS2
L4 系统业务定位 ⚠️
⚠️ 系统业务定位:面向金融机构的开放 API 平台(Open Banking Platform),对外提供标准化的银行能力 API,支持第三方开发者接入调用,具备完整的 API 全生命周期管理、应用接入管理、开发者生态运营、计费结算等核心能力。
⚠️ 业务边界:
- 管的:
- API 全生命周期(注册 → 审核 → 发布 → 版本管理 → 下线归档)
- 应用接入全流程(创建 → 审核 → 密钥分配 → 调用 → 统计 → 计费)
- 开发者管理(注册 → 实名认证 → 权限分配 → 社区互动)
- 产品管理(金融产品打包 → 定价 → 上架 → 销售统计)
- 沙箱测试环境(模拟调用 → 结果校验 → 文档对照)
- 交易日志与审计(请求/响应全记录 → 日志检索 → 合规报告)
- BPM 工作流(审批流定义 → 实例管理 → 任务处理)
- 不管的:
- 实际金融业务逻辑(本平台为能力开放层,不直接处理存贷汇等业务)
- 支付清算(需对接外部核心银行系统)
- 风控反欺诈(仅有基础限流,缺专业风控引擎)
- API 自动化测试(缺少 CI/CD 集成和自动化测试框架)
- API 市场商业化运营(推荐/评分/评论/排行榜等功能缺失)
系统成熟度判断⚠️:成长期——核心 API 管理和应用接入流程已基本完善,但开发者生态运营、监控告警、合规审计等方面仍需加强。技术栈相对现代但面临升级压力。
§3 代码量基线
L1 分项目代码量统计
| 项目 | Java 文件数 | Vue 文件数 | JS 文件数 | XML/配置 | 估算 LOC | 说明 |
| fop-common | ~40 | - | - | ~30 | ~15,000 | 公共工具类/常量/PO对象(143个)/加解密/序列号 |
| fop-platform-service | ~60 | - | - | ~80 | ~25,000 | Dubbo Provider/业务Service/MQ消费者/定时任务 |
| fop-api-gateway | ~25 | - | - | ~20 | ~12,000 | 网关核心/路由/过滤器/限流/Dubbo调用 |
| fop-portal-devcommunity | ~45 | - | - | ~25 | ~10,000 | Shiro认证/WebSocket/文件上传/Dubbo代理 |
| ijep-clouds-services | ~53 | - | - | ~35 | ~18,000 | FOP/BPM/SYS/Console 四个子服务 |
| openportal | - | ~150 | ~100 | ~20 | ~35,000 | 开放前台 Vue 组件/页面/路由 |
| jepWeb | - | ~50 | ~120 | ~15 | ~30,000 | 管理后台 Vue 组件/图表/表格 |
| Java 总计: ~223 文件 | 前端总计: ~420 文件 | 总估算: ~145,000+ 行代码 |
L1 Top 10 代码量文件(后端 Java)
| # | 文件 | 所属项目 | LOC 估算 | 说明 |
| 1 | TranLogFilter.java | fop-common | ~400 | 交易日志过滤器(请求/响应全量记录) |
| 2 | FopApiBookPo.java | fop-common | ~350 | API 信息实体(最大表结构) |
| 3 | ParamContext.java | fop-common | ~250 | 参数上下文(请求参数解析封装) |
| 4 | DateUtils.java | fop-common | ~350 | 日期工具类(格式化/计算/转换) |
| 5 | MsgPushContext.java | fop-common | ~270 | 消息推送上下文 |
| 6 | SequenceUtils.java | fop-common | ~230 | 序列号生成工具(多种序列策略) |
| 7 | CommonProcessImpl.java | fop-common | ~120 | 通用前后处理逻辑 |
| 8 | SM2Utils.java | fop-common | ~240 | 国密 SM2 加解密工具 |
| 9 | RSAUtils.java | fop-common | ~160 | RSA 加解密工具 |
| 10 | FopGatewayController.java | fop-api-gateway | ~200 | 网关控制器(路由/H5认证/Dubbo转发) |
L1 数据模型规模
§4 技术栈与决策评估
L1 技术栈全景表
| 组件 | 版本 | 用途 | 来源证据 | EOL/风险 |
| Java JDK | 1.8 | 运行环境 | pom.xml | LTS 至 2025 |
| Spring Framework | 4.1.6.RELEASE | IoC/AOP/事务 | fop-parent pom | 2017 EOL |
| Spring Boot | 2.1.3/2.1.6.RELEASE | 快速开发/自动配置 | gateway/portal pom | 2023 EOL |
| Spring Cloud Gateway | 2.1.1.RELEASE | API 网关 | gateway pom | 过时 |
| Apache Dubbo | Alibaba 2.6.x (via dap) | RPC 远程调用 | pom.xml | 建议升级 Apache 3.x |
| MyBatis | 1.3.2 | ORM 持久层 | gateway pom | 稳定 |
| Apache Shiro | 1.3.2 | Portal 认证授权 | portal pom | CVE 风险 |
| Spring Security/OAuth2 | 2.3.5.RELEASE | 网关 OAuth2 认证 | gateway pom | 可用 |
| MySQL Connector | 8.0.15 | 数据库驱动 | pom.xml | 新版 |
| MongoDB Driver | spring-data 1.8.0 | 文档数据库 | clouds pom | 过时 |
| Redis (Jedis) | 2.9.3 | 缓存/Session | pom.xml | 稳定 |
| Elasticsearch | 7.1.0 / 6.4.3 | 日志检索 | clouds pom | 较新 |
| RabbitMQ (AMQP) | spring-rabbit 1.4.5 | 消息队列 | pom.xml | 过时 |
| ActiveMQ | spring-boot-starter | BPM 消息 | bpm pom | 稳定 |
| Alibaba Druid | 1.1.9 | 连接池 | pom.xml | 稳定 |
| Alibaba FastJSON | 1.2.68 | JSON 序列化 | pom.xml | RCE 风险 |
| Alibaba Sentinel | 1.7.2 / 1.6.1 | 限流熔断 | gateway/clouds pom | 新版 |
| FastDFS Client | 1.26.2 | 分布式文件存储 | pom.xml | 稳定 |
| ZooKeeper (zkclient) | 0.10 | Dubbo 注册中心 | pom.xml | 稳定 |
| BouncyCastle bcprov | 1.57 | 加密算法提供者 | pom.xml | 过时 |
| Jasypt | 2.1.0 | 配置加密 | pom.xml | 稳定 |
| SkyWalking APM | 6.6.0 | 链路追踪 | pom.xml | 稳定 |
| Prometheus Micrometer | 最新 | 指标监控 | gateway pom | 现代化 |
| Lombok | 1.18.6 | 代码简化 | pom.xml | 稳定 |
| Vue.js | 2.5.x | 前端框架 | package.json | 2023 EOL |
| Element UI | 2.x | 前台 UI 组件库 | package.json | 稳定 |
| ViewUI/iView | 3.x | 后台 UI 组件库 | package.json | 稳定 |
| ECharts | 4.x | 图表可视化 | package.json | 新版 |
| Webpack | 3.x | 前端构建工具 | package.json | 过时 |
L2 关键技术决策评估
| 决策 | 利 | 弊 | 后果 |
| Spring Cloud Gateway + Dubbo 混合 | 网关标准化 + 内部高性能 RPC;Gateway 响应式非阻塞 | 两套协议增加复杂度;Gateway 与 Dubbo 服务发现需适配 | 需要维护两套服务治理体系 |
| Shiro(Portal)+ OAuth2(Gateway)双认证 | Portal 用轻量 Shiro 快速开发;Gateway 用标准 OAuth2 对外暴露 | 两套认证机制不一致,用户态同步复杂 | 开发者需要在 Portal 登录后再获取 OAuth Token |
| 四存储引擎(MySQL+MongoDB+Redis+ES) | 各取所长:关系型/文档/缓存/搜索 | 运维成本高;跨引擎事务无法保证一致性 | 数据分散在多个存储,备份恢复复杂 |
| RabbitMQ + ActiveMQ 双消息队列 | 业务隔离:RabbitMQ 处理业务消息,ActiveMQ 处理 BPM 工作流 | 运维两套 MQ 系统;消息追踪困难 | 需要两套监控和运维工具链 |
| Fastjson 作为 JSON 序列化 | 性能好,API 简洁 | 1.2.68 存在已知反序列化 RCE 漏洞 | 安全风险 应迁移到 Jackson 或升级到 fastjson2 |
| 国密 SM2 算法集成 | 符合金融行业安全合规要求 | 增加了加解密复杂度,性能有一定损耗 | 满足监管要求,但需注意密钥安全管理 |
| 前后端完全分离(Vue SPA) | 前后端独立开发部署;用户体验好 | SEO 不友好;首屏加载慢;需要 Nginx 配置历史模式路由 | 适合后台管理系统和开发者平台场景 |
| Spring 4.1.6(fop-parent) | 当时稳定版本 | 相比 Spring Boot 2.x 的 Spring 5 严重过旧 | 无法使用新特性(Reactive/WebFlux);安全补丁停止 |
§5 架构骨架与请求链路
L1 分层架构图
flowchart TB
subgraph 展现层["展现层 (Frontend)"]
OPEN["openportal
Vue 2.5 + Element UI
开放门户前台"]
ADMIN["jepWeb
Vue 2.5 + iView
管理控制台"]
PORTAL["devcommunity
Thymeleaf
开发者门户"]
end
subgraph 网关层["网关层 (Gateway :8188)"]
ROUTER["路由匹配
Spring Cloud Gateway"]
AUTH["OAuth2 认证
Token 校验"]
LIMIT["限流熔断
Sentinel"]
FILTER["全局过滤器
TranLogFilter"]
PROXY["Dubbo 代理
→ fop-parent"]
end
subgraph 业务服务层["业务服务层 (fop-parent)"]
DUBBO_P["Dubbo Provider
Jetty 内嵌"]
SVC["Service 实现
业务逻辑"]
DAO["DAO/Mapper
MyBatis 持久化"]
PO["PO 实体
143 个对象"]
end
subgraph 微服务层["微服务层 (ijep-clouds-services)"]
FOP_S["FOP Service
REST API / ES日志"]
BPM_S["BPM Service
工作流审批"]
SYS_S["SYS Service
系统管理"]
end
subgraph 数据层["数据层"]
MYSQL[(MySQL
主库)]
MONGO[(MongoDB
文档库)]
REDIS[(Redis
缓存)]
ES[(Elasticsearch
日志检索)]
FASTDFS[(FastDFS
文件存储)]
end
OPEN -->|HTTPS/HTTP| ROUTER
ADMIN -->|HTTPS/HTTP| ROUTER
PORTAL -->|HTTP/Dubbo| ROUTER
ROUTER --> AUTH
AUTH --> LIMIT
LIMIT --> FILTER
FILTER --> PROXY
PROXY -->|Dubbo RPC| DUBBO_P
DUBBO_P --> SVC
SVC --> DAO
DAO --> PO
PO --> MYSQL
SVC --> REDIS
SVC --> FASTDFS
FILTER -->|异步写入| ES
SYS_S --> MONGO
BPM_S -->|ActiveMQ| BPM_Q["消息队列"]
L1 模块依赖关系
flowchart BT
subgraph "fop-parent 父工程"
common[fop-common
公共模块]
platform[fop-platform-service
平台服务]
end
subgraph "fop-api-gateway"
gateway[fop-api-gateway
网关核心]
cxf_demo[fop-cxf-demo
WS示例]
ws_demo[fop-websocket-demo
WS服务端]
ws_client[fop-websocket-client
WS客户端]
end
subgraph "ijep-clouds-services"
fop_svc[ijep-clouds-fop-service]
bpm_svc[ijep-clouds-bpm-service]
sys_svc[ijep-clouds-sys-service]
console[ijep-clouds-service-console]
end
subgraph "fop-portal"
portal[fop-portal-devcommunity]
end
common --> platform
platform -.->|Dubbo Provider| gateway
gateway --> cxf_demo
gateway --> ws_demo
gateway --> ws_client
console --> fop_svc
console --> bpm_svc
console --> sys_svc
portal -.->|Dubbo Consumer| platform
L2 API 请求处理全链路
以"开发者调用开放 API"为例:
HTTPS POST /api/v2/{apiPath}?appKey=xxx&sign=xxx×tamp=xxx
→ Nginx 反向代理 → fop-api-gateway:8188
→ Spring Cloud Gateway 路由匹配:
· GlobalFilter 链(按 order 顺序执行):
1. AuthGlobalFilter: OAuth2 Token 校验 / H5 Token 校验 / SDK AppKey+Sign 校验
2. RateLimitGlobalFilter: Sentinel 限流检查(QPS/并发数)
3. IpBlacklistFilter: IP 黑名单过滤
4. TranLogFilter: 交易日志记录(请求头/体/时间戳)
→ 路由到目标后端服务:
· 若路由到 fop-parent → Dubbo RPC 调用(通过 DubboInvoke 封装)
· 若路由到 ijep-clouds → HTTP REST 调用
→ fop-platform-service (Dubbo Provider):
· 接收 DefaultDubboModel(包含 appId/tableName/sqlId/parameterList 等)
· ParamContext 参数解析和转换
· CommonProcessImpl.preProcess() 前置处理(签名校验/IP白名单/权限检查)
· MyBatis Mapper 执行 SQL
· CommonProcessImpl.postProcess() 后置处理(结果脱敏/日志推送/消息通知)
· 返回 BusinessOutput(包含响应头 + 业务数据)
→ TranLogFilter: 异步写入交易日志到 MySQL/Elasticsearch
→ JSON 响应返回给调用方
L2 网关过滤器链
| 过滤器 | Order | 类型 | 职责 |
| AuthGlobalFilter | -100 | GlobalFilter | 统一认证(OAuth2/H5/SDK 三种模式) |
| RateLimitGlobalFilter | -50 | GlobalFilter | 基于 Sentinel 的限流熔断 |
| IpBlacklistFilter | 0 | GlobalFilter | IP 黑名单拦截 |
| TranLogFilter | 100 | OncePerRequestFilter | 交易日志全量记录 |
| DubboRouteService | - | RouteService | 动态路由加载(从数据库读取路由配置) |
L4 业务能力地图 ⚠️
| 业务域 | 能力 | 完整度 |
| API 管理 | API 注册与录入 | 完整 |
| API 审核发布 | 完整 |
| 版本管理 | 完整 |
| 下线归档 | 完整 |
| API 监控告警 | 部分(有日志缺实时告警) |
| 应用接入 | 应用创建 | 完整 |
| 应用审核 | 完整 |
| 密钥分配(appKey/appSecret) | 完整 |
| 调用统计与计费 | 部分(有统计缺灵活计费策略) |
| 开发者管理 | 开发者注册/登录 | 完整 |
| 实名认证 | 部分 |
| 权限管理 | 完整 |
| 开发者社区 | 完整 |
| 产品管理 | 产品打包上架 | 完整 |
| 产品定价 | 完整 |
| 销售统计 | 完整 |
| 沙箱测试 | 模拟环境调用 | 完整 |
| 结果校验 | 部分 |
| 文档对照 | 完整 |
| 系统管理 | 用户/角色/权限 | 完整 |
| 数据字典/元数据 | 完整 |
| BPM 工作流 | 完整 |
| 日志审计 | 交易日志记录 | 完整 |
| 日志检索(ES) | 完整 |
| 合规报表导出 | 部分 |
§6 数据层与领域模型
L1 数据库基线
| 主数据库 | MySQL 8.x,数据库名 fop,字符集 UTF-8 |
| 连接池 | Alibaba Druid 1.1.9(支持监控 SQL 执行) |
| ORM 框架 | MyBatis 1.3.2 + 180+ Mapper XML 文件 |
| 文档数据库 | MongoDB(用于 ijep-clouds-sys-service 的元数据和日志存储) |
| 缓存 | Redis(Session 存储/权限缓存/分布式锁) |
| 搜索引擎 | Elasticsearch 7.1/6.4(交易日志全文检索) |
| 文件存储 | FastDFS 分布式文件系统 |
L1 核心业务表清单
展开查看 143 个 PO 对象中的核心业务表(Top 30)
| PO 类名 | 推测表名 | 业务含义 | 重要性 |
| FopApiBookPo | FOP_API_BOOK | API 信息(最大表,含名称/路径/方法/版本/状态等) | 核心 |
| FopAppBookPo | FOP_APP_BOOK | 应用信息(开发者创建的应用实例) | 核心 |
| FopDeveloperInfoPo | FOP_DEVELOPER_INFO | 开发者信息(注册/认证/联系方式) | 核心 |
| FopProductBookPo | FOP_PRODUCT_BOOK | 产品信息(API 打包成的金融产品) | 核心 |
| FopAgreementBookPo | FOP_AGREEMENT_BOOK | 协议书(开发者签署的服务协议) | 重要 |
| ParamPo | PARAM_* | 参数配置(动态 SQL 参数映射) | 重要 |
| TokenPo | TOKEN_* | 令牌信息(OAuth2/访问令牌存储) | 重要 |
| H5BookModel | H5_BOOK | H5 菜单配置(移动端 H5 页面菜单) | 一般 |
| MenuBookModel | MENU_BOOK | 菜单树(管理后台菜单结构) | 一般 |
| FopRouteDefinition | GATEWAY_ROUTE | 网关路由配置(动态路由存储) | 重要 |
| FopRouteFluid | GATEWAY_ROUTE_FLUID | 路由流量配置(灰度发布/金丝雀发布) | 一般 |
| FopRouteFusing | GATEWAY_ROUTE_FUSING | 路由熔断配置(降级策略) | 一般 |
| CountGroupByResult | - | 分组聚合结果(通用统计 VO) | 辅助 |
注:其余 130+ 个 PO 对象主要为系统管理(用户/角色/权限/字典)、日志审计、配置管理等支撑表。
L2 ORM 映射模式
- 映射方式:MyBatis XML Mapper(*.xml),非注解映射。所有 Mapper XML 位于各模块的 resources/mapper/ 目录
- 命名规范:表名使用大写下划线(FOP_API_BOOK),对应 PO 使用驼峰命名(FopApiBookPo)
- 主键策略
- 自增主键(MySQL AUTO_INCREMENT):大部分业务表
- 雪花算法 ID:IdWorker.java(分布式场景下使用)
- 序列号生成:SequenceUtils.java(支持多种序列策略:UUID/时间戳/自定义前缀)
- 查询模式:
- 通用 DAO 模式:IDaoService + DaoServiceImpl 提供基础 CRUD
- 动态 SQL:通过 DefaultDubboModel 的 sqlId + parameterList 动态拼接
- 分页查询:支持 pageIndex + pageSize 分页参数
- 关联映射:主要使用手动关联(在 SQL 中 JOIN 或应用层组装),少量使用 MyBatis resultMap 关联
L2 事务边界
- 事务管理:Spring 声明式事务(@Transactional 注解或 AOP XML 配置)
- 传播行为:
- Dubbo Provider 服务方法默认 REQUIRED
- 日志写入操作 REQUIRES_NEW(独立事务,避免主事务回滚影响日志)
- 事务隔离级别
- 默认 READ_COMMITTED(MySQL 默认级别)
- 财务相关操作可能使用 SERIALIZABLE(需进一步确认)
- 连接池:Druid 1.1.9(支持 SQL 监控、慢查询检测、防 SQL 注入)
L3 业务实体识别与分类
| 分类 | 实体 | 说明 |
| 核心实体 | FopApiBookPo | API 定义(名称/路径/方法/版本/状态/描述/请求示例/响应示例) |
| FopAppBookPo | 应用实例(名称/类型/状态/appKey/appSecret/回调地址/权限范围) |
| FopDeveloperInfoPo | 开发者(账号/企业名称/联系人/手机/邮箱/认证状态) |
| FopProductBookPo | 产品(名称/描述/API 列表/定价/状态/上架时间) |
| 网关实体 | FopRouteDefinition | 路由定义(URI/谓词/过滤器) |
| FopRouteFluid | 流量规则(灰度比例/条件匹配) |
| FopRouteFusing | 熔断配置(阈值/降级响应) |
| 认证实体 | TokenPo | 令牌(access_token/refresh_token/过期时间/作用域) |
| ParamPo | 认证参数(client_id/client_secret/grant_type) |
| FopAgreementBookPo | 协议书(签署方/版本/签署时间/状态) |
| 配置实体 | MenuBookModel | 菜单(树形结构/图标/URL/排序/可见性) |
| H5BookModel | H5 菜单(移动端页面配置) |
| DbConstants | 数据库字段常量(33KB,集中管理所有表的列名常量) |
| CountGroupByResult | 统计聚合结果 VO |
§7 认证授权
L1 安全配置识别
| 网关认证 | Spring Security OAuth2 2.3.5(Token 校验/Scope 权限) |
| Portal 认证 | Apache Shiro 1.3.2 + 自定义 OAuth2 Token 实现 |
| SDK 认证 | AppKey + Timestamp + Sign(HMAC-SHA256 签名) |
| H5 认证 | 简易 Token(移动端 H5 场景) |
| 加密算法 | AES(通信加密)+ RSA(密钥交换)+ SM2(国密签名)+ MD5(密码哈希) |
| 硬编码凭证 | 严重 多环境配置中存在明文数据库密码、加密密钥硬编码 |
L2 多层次认证机制
1. API 网关层(OAuth2 + SDK Sign)
针对外部 API 调用者的三种认证模式:
- OAuth2 模式:调用方先通过 client_credentials/password 授权码获取 access_token,每次请求携带 Authorization: Bearer {token}。网关 OAuth2 Server 校验 token 有效性和 scope 权限。
- SDK 模式:调用方使用官方 SDK,自动完成 AppKey + Timestamp + Sign 签名生成。网关 AuthGlobalFilter 验签:
// 签名算法(推断)
sign = HMAC-SHA256(appSecret, method + url + timestamp + body)
// 网关验证
serverSign = HMAC-SHA256(lookup(appKey), request.method + request.uri + request.timestamp + request.body)
assertEqual(sign, serverSign)
- H5 模式:移动端 H5 页面调用,使用简易 Token 认证(降低移动端集成复杂度)。
2. 开发者 Portal 层(Shiro + 自定义 OAuth2)
开发者登录 open portal 后台时:
- 用户提交用户名 + 密码(AES 加密传输)
- Shiro OAuth2Filter 拦截,提取 OAuth2Token
- OAuth2Realm.doGetAuthenticationInfo() 调用 ShiroService 验证
- ShiroService 通过 Dubbo 调用后端验证用户凭据
- 认证成功后创建 Session(Redis 存储,30 分钟超时)
- 后续请求通过 Shiro 过滤器链检查 Session 有效性
3. 管理后台层(JWT/Session)
jepWeb 管理控制台使用 Vuex + Axios 拦截器附加 Token,后端 Spring Security 校验。
L3 权限模型
RBAC 权限模型(基于角色的访问控制):
- 用户(Developer/Admin)← 多对多 → 角色(Role)
- 角色← 多对多 → 权限(Permission/Menu)
- 权限粒度:
- 菜单级:控制可见的功能模块
- API 级:控制可调用的 API 接口(scope)
- 操作级:控制按钮级别的增删改查(@RequiresPermissions)
| 角色 | 权限范围 |
| 超级管理员 | 全部权限(系统配置/用户管理/审核/统计) |
| 运营管理员 | API 审核/应用审核/开发者管理/产品管理/统计报表 |
| 开发者 | 创建应用/查看 API 文档/沙箱测试/查看调用统计 |
| 访客 | 仅浏览公开的 API 市场和文档 |
L3">安全缺陷清单
| 等级 | 缺陷 | 位置 | 说明 |
| 严重 | 动态日志级别修改 | FopController.level() | 公开接口可动态修改 Logback 日志级别,可被利用泄漏敏感信息 |
| 严重 | 硬编码凭证 | application-*.yml | 多环境配置含明文数据库密码、Redis 无密码 |
| 严重 | Fastjson 反序列化 | 全局 | 1.2.68 版本存在已知 AutoType 反序列化 RCE 漏洞 |
| 高 | Shiro CVE-2016-4437 | fop-portal | Shiro 1.3.2 存在 RememberMe 反序列化漏洞 |
| 高 | SQL 注入风险 | DAO 层 | 部分动态 SQL 使用字符串拼接而非参数绑定 |
| 高 | 密码哈希弱 | Portal 认证 | MD5 单次迭代,远低于安全标准(建议 bcrypt/scrypt) |
| 低 | 无 HTTPS 强制 | Gateway 配置 | 未显见 HTTP→HTTPS 重定向配置 |
§8 接口与调用链
L1 API 端点全量清单
fop-api-gateway 网关接口
| URL 前缀 | Controller | 方法 | 业务域 |
| /gateway/** | FopGatewayController | POST/GET | 动态路由转发(核心入口) |
| /route/** | RouteController | CRUD | 路由管理(增删改查/刷新缓存) |
| /h5/auth/** | H5AuthController | POST | H5 认证(Token 获取/校验) |
| /sdk/auth/** | SdkAuthController | POST | SDK 认证(Sign 验签/Token 发放) |
| /monitor/** | MonitorController | GET | 监控指标(Sentinel/系统状态) |
ijep-clouds-fop-service 接口
| URL 前缀 | Controller | 方法 | 业务域 |
| ${service.prefix.fop}/fopservice/** | FopController | GET/POST | FOP 通用服务(查询/CURD/树节点/下拉选项) |
| ${service.prefix.fop}/fopfile/** | FileController | POST/GET | 文件服务(上传/下载/预览/导入导出) |
| ${service.prefix.fop}/elklogservice/** | ElkLogController | GET/POST | ELK 日志查询(分页查询/按流水号查/字段去重) |
ijep-clouds-sys-service 接口
| URL 前缀 | 业务域 |
| /sys/dict/** | 数据字典管理 |
| /sys/metadata/** | 元数据管理 |
| /sys/usergroup/** | 用户组管理 |
| /sys/permission/** | 权限管理 |
ijep-clouds-bpm-service 接口
| URL 前缀 | 业务域 |
| /bpm/definition/** | 流程定义管理 |
| /bpm/instance/** | 流程实例管理 |
| /bpm/task/** | 任务处理(审批/驳回/转办) |
fop-portal-devcommunity 接口
| URL | 方法 | 业务域 | 认证要求 |
| /login | POST | 用户登录 | 无需认证 |
| /regist | POST | 用户注册 | 无需认证 |
| /request | POST | 通用请求(Dubbo 代理) | OAuth2 认证 |
| /fileUpload | POST | 文件上传 | OAuth2 认证 |
| /captcha.jpg | GET | 验证码图片 | 无需认证 |
| /getLoginToken | POST | 登录前 Token | 无需认证 |
L3 API 状态机
stateDiagram-v2
[*] --> 草稿: 创建 API\n(state=00)
草稿 --> 待审核: 提交审核\n(state=01)
待审核 --> 审核通过: 运营审核通过\n(state=02)
待审核 --> 审核驳回: 返回修改\n(state=03)
审核驳回 --> 待审核: 重新提交
审核通过 --> 已发布: 发布上线\n(state=04)
已发布 --> 已下线: 下线操作\n(state=05)
已下线 --> [*]
state "API 生命周期状态机" as API {
草稿: 草稿
待审核: 待审核
审核通过: 审核通过
审核驳回: 审核驳回
已发布: 已发布
已下线: 已下线
}
应用状态机:
待提交(00) → 待审核(01) → 审核通过(02) → 正常运行(03) → 冻结/注销(04)
↓
审核驳回(05) → 可重新提交
L3 业务约束与校验规则
| 规则 | 实现 | 证据 | 置信度 |
| API 路径唯一性 | 同一 version 下 apiPath 不可重复,否则抛异常 | B级: FopApiBookPo 校验 | 高 |
| AppKey 唯一性 | 应用创建时生成唯一 appKey,全局不可重复 | B级: FopAppBookPo 创建逻辑 | 高 |
| 签名超时拒绝 | 请求 timestamp 与服务器时间差超过阈值(如 15 分钟)则拒绝 | B级: SdkAuthController | 高 |
| 频率限制 | 基于 Sentinel 按 AppKey + API 维度限流(QPS/并发数) | B级: RateLimitGlobalFilter | 高 |
| IP 黑名单 | IpBlacklistFilter 检查请求 IP 是否在黑名单中 | B级: IpBlacklistFilter | 高 |
| 交易日志必记 | TranLogFilter 拦截所有请求,记录完整请求/响应/耗时 | B级: TranLogFilter.java | 高 |
| 权限范围检查 | OAuth2 Token 的 scope 必须包含请求的 API 权限 | B级: AuthGlobalFilter | 高 |
| 密码错误锁定 | Portal 连续输错密码触发验证码(10 次?具体次数需确认) | B级: Portal 登录逻辑 | 中 |
§9 跨系统集成
L1 集成点清单
| 集成方式 | 目标系统/中间件 | 用途 | 配置位置 |
| Dubbo RPC | fop-platform-service | 网关→核心服务的内部调用(高频) | dubbo.xml / application.yml |
| HTTP REST | ijep-clouds-* 微服务 | 网关→云服务调用 | Gateway Route 配置 |
| JDBC | MySQL 8.x | 主数据库持久化 | application-*.yml (druid) |
| Jedis | Redis | 缓存/Session/分布式锁 | application.yml (spring.redis) |
| Spring Data MongoDB | MongoDB | 文档存储/日志/元数据 | clouds application.yml |
| REST High Level Client | Elasticsearch 7.x | 交易日志全文检索 | FopServiceImpl |
| AMQP (RabbitMQ) | RabbitMQ | 异步消息(通知/推送/事件) | spring-rabbit 配置 |
| JMS (ActiveMQ) | ActiveMQ | BPM 工作流消息 | bpm-service 配置 |
| ZooKeeper Client | ZooKeeper | Dubbo 服务注册发现 | dubbo.registry.address |
| FastDFS Client | FastDFS | 分布式文件存储(头像/文档/证书) | FileController |
| CXF (SOAP) | 外部 WebService | 遗留系统对接 Demo | fop-cxf-demo |
| WebSocket | 浏览器客户端 | 实时消息推送(社区聊天/通知) | WebSocketServer |
| Email (SMTP) | 邮件服务器 | 邮件通知(注册/审核/告警) | 邮件配置(推断) |
L2 核心调用链
sequenceDiagram
participant Dev as 开发者应用
participant GW as API Gateway
(:8188)
participant Dub as Dubbo Provider
(fop-platform)
participant DB as MySQL
participant Cache as Redis
participant MQ as RabbitMQ
participant Log as ElasticSearch
Dev->>GW: POST /api/v2/user/info
Header: Authorization: Bearer {token}
GW->>GW: AuthGlobalFilter 校验 OAuth2 Token
GW->>GW: RateLimitGlobalFilter 限流检查
GW->>GW: TranLogFilter 记录请求日志
GW->>Dub: Dubbo RPC 调用
DefaultDubboModel{sqlId, params}
Dub->>Cache: 查询缓存(如有)
alt 缓存命中
Cache-->>Dub: 返回缓存数据
else 缓存未命中
Dub->>DB: MyBatis 执行 SQL 查询
DB-->>Dub: 返回结果集
Dub->>Cache: 写入缓存
end
Dub-->>GW: BusinessOutput{head, body}
GW->>Log: 异步写入日志到 ES
GW-->>Dev: JSON 响应 {code, message, data}
§10 定时任务与异步机制
L2 异步机制
| 机制 | 技术 | 用途 | 位置 |
| 消息队列异步 | RabbitMQ | 消息推送/事件通知/解耦 | fop-platform AMQMessageUtil |
| BPM 工作流消息 | ActiveMQ | 审批流程推进/任务提醒 | bpm-service |
| WebSocket 实时 | WebSocket | 社区聊天/实时通知 | devcommunity WebSocketServer |
| 异步日志写入 | @Async / 线程池 | TranLogFilter 异步写日志 | gateway ExecutorService |
| 定时任务 | Spring @Scheduled | 缓存刷新/统计数据/过期清理 | fop-platform 定时任务类 |
L3 定时任务清单
| 任务 | CRON 表达式(推断) | 功能 |
| 路由缓存刷新 | 每 N 分钟 | 从数据库重新加载路由配置到 Gateway 内存 |
| Token 清理 | 每日凌晨 | 清理过期的 OAuth2 Token / Session |
| 统计数据聚合 | 每小时/每日 | 聚合 API 调用量/成功率/响应时间 |
| 文件清理 | 每日凌晨 | 清理临时上传文件/过期缓存 |
| 证书有效期检查 | 每日 | 检查应用证书/协议书是否即将过期 |
§11 前端技术实现
L2 openportal(开放门户前台)
| 技术栈 | Vue 2.5 + Vue Router + Vuex + Element UI + Mint UI(移动端)+ ECharts + Axios + Webpack 3 |
| 目录结构 | src/pages/(页面)+ src/components/(组件)+ src/api/(接口)+ src/store/(状态)+ src/router/(路由) |
| 主要页面 | 首页/登录注册/API 市场/产品中心/开发者中心/文档中心/沙箱测试/社区论坛/帮助中心/个人中心/控制台 |
| 状态管理 | Vuex(user 模块存储登录态/token/用户信息) |
| API 调用 | Axios 封装(baseURL 指向 gateway:8188,拦截器附加 Token) |
| 特色功能 | API 在线调试(类似 Swagger UI)/ 代码示例生成(Java/Python/JavaScript 等)/ ECharts 数据可视化大盘 |
L2">jepWeb(管理控制台)
| 技术栈 | Vue 2.5 + Vue Router + Vuex + ViewUI(iView) 3.x + ECharts + Axios + Webpack 3 |
| 目录结构 | src/views/(页面)+ src/components/(组件)+ src/api/(接口)+ src/store/(状态)+ src/router/(路由) |
| 主要页面 | 登录/Dashboard 仪表盘/系统管理(用户/角色/菜单/字典)/FOP 管理(API 审核/应用审核/产品管理/开发者管理)/BPM 工作流/规则服务/调度任务/统计分析 |
| 特色功能 | iView Table 高级表格(排序/筛选/分页/导出)/ ECharts 图表(折线图/柱状图/饼图)/ 可折叠侧边栏菜单 |
L2">fop-portal-devcommunity(开发者门户)
| 技术栈 | Spring Boot 2.1.6 + Thymeleaf(模板渲染)+ jQuery + Shiro 1.3.2 |
| 特点 | 传统服务端渲染(SSR),非前后端分离架构 |
| 功能 | 开发者社区(论坛/问答/文章)/ 个人中心 / WebSocket 实时聊天 / 文件上传下载 |
§12 安全基线
L1">CVE 漏洞与安全风险
| 组件 | 漏洞 | 严重性 |
| Fastjson 1.2.68 | AutoType 反序列化 RCE(CNVD-2020-26636 等系列漏洞) | 严重 |
| Shiro 1.3.2 | CVE-2016-4437 RememberMe 反序列化 RCE | 严重 |
| Spring Framework 4.1.6 | CVE-2016-1000027 RCE(若启用 WebFlow) | 高 |
| BouncyCastle 1.57 | 旧版本可能存在已知漏洞 | 中 |
| 动态日志接口 | FopController.level() 可被利用修改日志级别泄露信息 | 严重 |
L1">硬编码凭证清单
| 类型 | 位置 | 凭证 |
| MySQL 密码 | application-xa.yml / pro.yml | 明文密码 ⚠️ |
| Redis | 多处配置 | 无密码 ⚠️ |
| 加密密钥 | SM2Utils/RSAUtils/AesUtil | 密钥硬编码在代码中 ⚠️ |
| Dubbo Admin | dubbo.properties | 默认凭据 |
紧急安全建议:
- 立即升级 Fastjson 到 2.x 或替换为 Jackson
- 立即升级 Shiro 到 1.10.0+ 或迁移到 Spring Security
- 移除或加固 FopController.level() 动态日志接口(至少添加管理员权限校验)
- 将所有硬编码凭证迁移到配置中心(如 Nacos/Apollo)或 KMS
- 启用 Redis 密码认证
- 启用数据库连接 SSL 加密
L3">密码策略与加密
- 传输加密:HTTPS(TLS 1.2+)+ AES 对称加密敏感字段(AesUtil.java)
- 密钥交换:RSA 非对称加密(RSAUtils.java)
- 国密签名:SM2 椭圆曲线签名(SM2Utils.java)—— 符合金融国密合规
- API 签名:HMAC-SHA256(SDK 模式的请求签名)
- 密码存储:MD5 哈希(⚠️ 弱,建议升级到 bcrypt/scrypt/Argon2)
- Token 生成:JWT(OAuth2 Access Token)
L4">合规性推断
- ⚠️ 已满足:国密 SM2 算法集成(符合 GM/T 0003 标准);API 调用全量日志记录(满足基本审计要求);OAuth2 标准认证流程(符合开放授权最佳实践)
- ⚠️ 部分满足:交易日志有记录但缺少自动化异常检测告警;有 IP 黑名单但缺少 WAF 防护;有加密传输但部分配置未强制 HTTPS
- ⚠️ 未满足:缺少 API 调用量实时熔断告警通知;缺少自动化安全扫描(DAST/SAST);缺少数据脱敏规则配置(日志中可能包含敏感数据);密码策略弱于行业标准
§13 质量基线与技术债务
L1">代码质量指标
L2">技术债务清单
| 类别 | 债务项 | 影响 | 建议 |
| 安全 | Fastjson 1.2.68 反序列化漏洞 | RCE 远程代码执行风险 | 升级到 fastjson2 或替换 Jackson |
| 安全 | Shiro 1.3.2 CVE 漏洞 | RememberMe 反序列化 RCE | 升级到 1.10.0+ 或迁移到 Spring Security |
| 框架 | Spring 4.1.6 严重过旧(fop-parent) | 无法使用 Reactive/WebFlux 新特性 | 升级到 Spring Boot 2.7+/Spring 5.3+(需大量适配) |
| 框架 | Spring Boot 2.1.x 即将 EOL | 安全补丁停止 | 升级到 Spring Boot 2.7.x 或 3.x |
| 框架 | Dubbo Alibaba 2.6.x | 功能受限,社区已迁移到 Apache | 升级到 Apache Dubbo 3.x |
| 前端 | Vue 2.5 已停止维护 | 安全补丁和新功能停止 | 迁移到 Vue 3(工作量较大) |
| 前端 | Webpack 3.x 过时 | 构建速度慢,插件生态老旧 | 升级到 Webpack 5 或 Vite |
| 质量 | 无单元测试 | 重构回归风险极高 | 补充核心业务逻辑单元测试 |
| 质量 | 调试残留代码 | System.out.println / e.printStackTrace | 替换为 SLF4J Logger |
| 质量 | 魔法值/硬编码 | 状态码/错误码散落在代码中 | 抽取为枚举/常量类 |
| 运维 | 多环境配置散乱 | dev/sit/uat/prd/xa/poc 六七套配置 | 统一配置中心(Nacos/Apollo) |
§14 不确定项与风险
L1">事实不确定项
| 项 | 标注 | 可能原因 |
| Git 提交历史 | ❓ | 项目以 zip 包形式提供,无 .git 目录 |
| 数据库建表脚本 | ❓ | 未找到独立的 .sql 建表脚本,表结构需从 PO/Mapper 逆向推导 |
| API 文档 | ❓ | 未发现 Swagger/OpenAPI 规范文件 |
| 部署文档 | ❓ | 缺少 docker-compose/Kubernetes 部署配置 |
| 实际生产环境 | ⚠️ | 配置文件显示多环境(xa/pro/poc/dev/sit/uat/prd),但不确定哪个是当前生产 |
L2">实现机制不确定项
| 项 | 标注 | 说明 |
| Dubbo 协议细节 | ⚠️ | Dubbo 调用通过 dap 组件封装,具体的 service/method 映射需深入分析 |
| OAuth2 Token 存储方式 | ⚠️ | Token 可能存 MySQL 也可能存 Redis,需确认 |
| 消息队列消费逻辑 | ❓ | MQ Producer 有多处但 Consumer 具体处理逻辑未深入分析 |
| BPM 流程定义 | ❓ | 使用了哪种 BPM 引擎(Activiti/Flowable/Camunda?)未明确 |
| 定时任务 CRON | ⚠️ | @Scheduled 注解的具体 cron 表达式未逐个确认 |
L4">业务知识缺口
- ⚠️ 具体的 API 产品有哪些?(支付/账户/信贷/理财?)
- ⚠️ 计费策略是怎样的?(按调用量阶梯定价?包月?免费额度?)
- ⚠️ 开发者实名认证对接了哪些第三方?(公安/运营商/银联?)
- ⚠️ 实际对接的核心银行系统有哪些?如何交互?
- ⚠️ 合规审计报告的具体格式和监管报送要求?
- ⚠️ 生产环境的并发量和日调用量级?
- ⚠️ 高可用部署方案?(集群规模?负载均衡?容灾?)
验证建议:优先与原开发团队/业务人员进行访谈,重点验证 1-4 项(核心业务流程)。
§15 业务连续性与关键性评估
L4">关键业务流程识别
| 流程 | 关键性 | 中断影响 | 依据 |
| API 网关服务 | 关键 | 所有外部 API 调用中断,合作伙伴业务停摆 | 单点入口,无可替代路径 |
| OAuth2 认证服务 | 关键 | 所有调用方无法获取 Token,API 调用全部失败 | 认证是前置依赖 |
| Dubbo 核心服务 | 关键 | 网关转发后的业务逻辑无法执行 | 承载全部业务逻辑 |
| MySQL 主数据库 | 关键 | 全部业务数据无法读写,系统完全瘫痪 | 单一数据源依赖 |
| Redis 缓存 | 高 | Session 失效导致用户批量掉线;缓存穿透击垮数据库 | Session + 分布式锁依赖 |
| RabbitMQ 消息队列 | 高 | 异步消息堆积(通知/推送/事件延迟或丢失) | 解耦依赖 |
| Elasticsearch 日志 | 中 | 日志检索不可用,但不影响主业务 | 仅查询侧 |
| FastDFS 文件存储 | 低 | 文件上传/下载/预览不可用 | 辅助功能 |
| 开发者社区 Portal | 低 | 社区/论坛/聊天不可用 | 非核心业务 |
L4">故障影响范围
| 故障组件 | 影响面 | 恢复优先级 |
| MySQL 主库 | 全站瘫痪 | P0 立即 |
| API Gateway | 全部 API 不可用 | P0 立即 |
| Dubbo 核心服务 | 业务逻辑不可用 | P0 立即 |
| Redis | 用户掉线/缓存失效 | P1 30分钟内 |
| RabbitMQ | 消息延迟 | P1 2小时内 |
| ZooKeeper | Dubbo 服务发现失败 | P1 1小时内 |
| ES/MongoDB | 日志/文档查询不可用 | P2 当日 |
| FastDFS/Portal | 辅助功能不可用 | P3 一周内 |
§16 附录
L1">核心代码锚点索引
| 锚点 | 类名/文件 | 说明 |
| 网关启动 | FopApiGatewayApplication.java | Spring Boot 启动类 |
| 网关核心控制器 | FopGatewayController.java | 路由/H5认证/SDK认证/Dubbo转发 |
| 全局认证过滤器 | AuthGlobalFilter.java | OAuth2/H5/SDK 三种认证模式 |
| 限流过滤器 | RateLimitGlobalFilter.java | 基于 Sentinel 的限流熔断 |
| 交易日志过滤器 | TranLogFilter.java | 请求/响应全量日志记录(最大文件 ~400行) |
| IP 黑名单过滤器 | IpBlacklistFilter.java | IP 黑名单拦截 |
| 路由管理 | RouteController + RouteService | 动态路由 CRUD / 数据库加载 |
| Dubbo 通用调用 | DubboServiceImpl.java | Dubbo 泛化调用封装 |
| 参数上下文 | ParamContext.java | 请求参数解析和转换(~250行) |
| 前后置处理器 | CommonProcessImpl.java | 签名校验/权限检查/结果脱敏 |
| 消息推送上下文 | MsgPushContext.java | 异步消息推送封装 |
| 序列号工具 | SequenceUtils.java | 雪花算法/UUID/时间戳等多种序列策略 |
| 国密 SM2 加密 | SM2Utils.java | SM2 加解密/签名/验签 |
| RSA 加密 | RSAUtils.java | RSA 加解密(密钥交换场景) |
| AES 对称加密 | AesUtil.java(portal) | 通信加密(敏感字段) |
| 日期工具 | DateUtils.java | 日期格式化/计算/转换(~350行,最大工具类) |
| 数据库常量 | DbConstants.java | 所有表的列名常量集中定义(33KB) |
| ID 生成器 | IdWorker.java | 雪花算法分布式 ID 生成 |
| JSON 工具 | JsonUtil.java | Fastjson 封装 |
| Portal 认证 | ShiroConfig + OAuth2Filter + OAuth2Realm | Shiro + OAuth2 认证链 |
| Portal 请求控制器 | RequestController.java | 通用 Dubbo 代理请求入口 |
| WebSocket 服务 | WebSocketServer.java | 实时消息推送(社区聊天) |
| FOP Controller | FopController.java(clouds) | 分页查询/CURD/树节点/下拉选项/日志级别 |
| 文件控制器 | FileController.java(clouds) | 上传/下载/预览/Excel 导入导出 |
| ES 日志查询 | ElkLogController + ElkLogServiceImpl | Elasticsearch 日志分页检索 |
L2">配置文件索引
展开查看关键配置文件列表
| 文件 | 项目 | 内容 |
| application.yml | fop-api-gateway | 网关主配置(端口 8188/Profiles/Gateway/HTTP Client) |
| application-xa.yml | fop-api-gateway | 西安环境(MySQL 192.168.1.158:3306/fop) |
| application-pro.yml | fop-api-gateway | 生产环境(MySQL 192.168.11.33:3306/fop) |
| application-poc.yml | fop-api-gateway | POC 验证环境 |
| commonapplication.properties | fop-common | 公共配置(数据源/AMQ模板/线程池) |
| table_clazz.config | fop-common | 表名→PO 类名映射配置 |
| error_trans.config | fop-common | 错误码转换配置 |
| common_errorCode_zh_CN.config | fop-common | 中文错误码定义 |
| dubbo.xml / dubbo.properties | fop-parent | Dubbo 服务注册/引用/超时/重试 |
| ds/*.xml | fop-parent | MyBatis DataSource 配置(多数据源?) |
| spring/commonservice.xml | fop-parent | Spring 公共 Bean 配置 |
| application-*.yml | fop-portal-devcommunity | Portal 多环境配置(dev/sit/uat/prd) |
| ShiroConfig.java | fop-portal | Shiro 过滤器链/Realm 配置 |
L4">访谈提纲
按业务域分组的访谈问题
| 业务域 | 问题 |
| API 产品 | 目前上线了哪些 API 产品?对应的实际银行能力是什么? |
| 计费模式 | API 调用如何计费?按次/按月/阶梯定价?是否有免费额度? |
| 对接系统 | 平台对接了哪些核心银行系统?采用什么协议交互? |
| 实名认证 | 开发者实名认证对接了哪些第三方?认证流程是怎样的? |
| 合规审计 | 监管机构对 API 调用日志的留存要求是什么?是否有定期合规报表? |
| 运维监控 | 生产环境的并发量/QPS/日调用量?是否有 Prometheus+Grafana 监控大盘? |
| 高可用 | 集群部署方案?是否有容器化(Docker/K8s)?灾备方案? |
| 安全事件 | 过去是否发生过安全事件?如何应对的? |
| 未来规划 | 是否有升级计划?(Spring Boot 3/Vue 3/Dubbo 3?) |