Open-Bank 开放银行平台

模块业务需求文档 · 逆向工程提取 · 8 大核心业务模块
基于静态代码分析
证据等级 A-E
文档日期:2026-05-28  |  代码库:open-bank (6子项目)  |  ⚠️ 部分业务规则为推断,需领域专家验证

目录

  1. API 网关模块 (Gateway)
  2. API 管理模块
  3. 应用接入管理模块
  4. 开发者管理模块
  5. 产品与计费模块
  6. 日志审计与监控模块
  7. 系统管理与工作流模块
  8. 开发者社区与门户模块

模块一:API 网关(Gateway)

1.1 模块概述

业务定位开放银行平台的统一入口,负责路由转发、认证授权、限流熔断、日志记录、协议转换等跨切面关注点
技术实现Spring Cloud Gateway 2.1.1 + Spring Boot 2.1.3 + Sentinel 1.7.2 + OAuth2 2.3.5
监听端口8188
核心组件GlobalFilter 链 / RouteService / DubboInvoke / AuthGlobalFilter / RateLimitGlobalFilter / TranLogFilter / IpBlacklistFilter
完整度完整(功能完善但存在安全风险)

1.2 业务流程

flowchart TB A["外部请求
HTTPS POST"] --> B{"路由匹配
Gateway Route"} B -->|匹配成功| C["过滤器链执行
Order: -100 → 100"] C --> C1["AuthGlobalFilter
OAuth2/H5/SDK 认证"] C1 --> C2["RateLimitGlobalFilter
Sentinel 限流熔断"] C2 --> C3["IpBlacklistFilter
IP 黑名单检查"] C3 --> C4["TranLogFilter
交易日志记录"] C4 --> D{目标服务类型} D -->|Dubbo 服务| E["Dubbo RPC 调用
→ fop-platform-service"] D -->|REST 服务| F["HTTP 调用
→ ijep-clouds-*"] E --> G["BusinessOutput 返回"] F --> G G --> H["TranLogFilter 异步写日志"] H --> I["JSON 响应返回"] B -->|未匹配| J["404 Not Found"]

📌 业务逻辑详述

  1. 请求接收与路由匹配:API Gateway 监听 8188 端口,接收所有外部 HTTPS/HTTP 请求。请求到达后,Spring Cloud Gateway 根据 URL 路径匹配预配置的路由规则(RouteDefinition)。路由配置可从数据库动态加载(通过 RouteService 定时刷新),支持谓词匹配(Path/Method/Header/Query)和过滤器链。[B级: FopGatewayController.java]
  2. 认证授权(AuthGlobalFilter, order=-100):网关的第一道防线,根据请求特征自动识别三种认证模式:
      • OAuth2 模式:检测 Authorization: Bearer {token} 头,调用 OAuth2 Server 校验 token 有效性、过期时间、scope 权限范围
      • SDK 模式:检测 appKey/timestamp/sign 参数,从数据库查询 appSecret 后验签(HMAC-SHA256),校验时间戳防重放攻击(15分钟窗口)
      • H5 模式:移动端 H5 场景的简易 Token 认证(降低集成复杂度)
    认证失败直接返回 401/403 错误,不继续后续处理。[B级: AuthGlobalFilter.java]
  3. 限流熔断(RateLimitGlobalFilter, order=-50):通过 Alibaba Sentinel 实现多维度限流:   • 按 AppKey 维度:限制单个应用的 QPS(如 1000 次/秒)   • 按 API 维度:限制单个接口的并发数   • 按 IP 维度:限制单 IP 的请求频率(防爬/防 DDOS) 触发限流返回 429 Too Many Requests,触发熔断返回降级响应。[B级: RateLimitGlobalFilter.java]
  4. IP 黑名单检查(IpBlacklistFilter, order=0):查询 Redis 中的 IP 黑名单缓存(定时从数据库加载),若请求 IP 在黑名单中则直接拒绝返回 403 Forbidden。[B级: IpBlacklistFilter.java]
  5. 交易日志记录(TranLogFilter, order=100):在请求处理前后记录完整的交易日志,包括:请求头(Authorization/X-Forwarded-For/User-Agent)、请求体、请求时间戳、目标 API 路径、AppKey、开发者 ID、响应状态码、响应体、耗时毫秒数。日志异步写入 MySQL 和 Elasticsearch,用于审计追溯和问题排查。[B级: TranLogFilter.java ~400行]
  6. 后端服务调用:认证和限流通过后,根据路由配置将请求转发到后端服务:   • 若目标是 fop-parent 的 Dubbo Service → 通过 DubboInvoke 封装进行 RPC 调用,传入 DefaultDubboModel(包含 appId/tableName/sqlId/parameterList 等)   • 若目标是 ijep-clouds 微服务 → 通过 HTTP REST 调用[B级: FopGatewayController.java]
  7. 响应返回:后端服务返回 BusinessOutput 或标准 JSON 响应,网关统一封装为标准格式返回给调用方:
{
  "code": "000000",
  "message": "success",
  "data": { ... },
  "traceId": "xxxxxxxx",
  "timestamp": 1716873600000
}

1.3 核心实体

FopRouteDefinition(路由定义)

字段类型业务含义约束
idString路由唯一标识主键
uriString目标服务 URI(lb://service-id 或 dubbo://service-name)必填
predicatesList<PredicateDefinition>路由谓词(Path/Method/Header/Query 匹配条件)至少一个
filtersList<FilterDefinition>路由过滤器(AddRequestHeader/StripPrefix 等)可选
orderint排序(多个路由匹配时的优先级)默认 0
metadataMap扩展元数据(超时/重试策略)可选

FopRouteFluid(流量配置 - 灰度发布)

字段类型业务含义
routeIdString关联的路由 ID
weightint流量权重百分比(如 10 表示 10% 流量走新版本)
conditionString灰度条件(AppKey 白名单/IP 段/Header 匹配)
targetUriString灰度目标 URI

FopRouteFusing(熔断配置)

字段类型业务含义
routeIdString关联的路由 ID
thresholdQpsdoubleQPS 阈值(超过则触发熔断)
thresholdErrorRatedouble错误率阈值(如 0.5 = 50% 错误率触发熔断)
windowSecondsint统计窗口时长(秒)
String降级响应内容(JSON 格式)

1.4 业务规则

规则类型规则描述证据
认证模式自动识别根据请求头/参数自动选择 OAuth2/H5/SDK 三种认证模式之一B级: AuthGlobalFilter.java
签名验签SDK 模式下 HMAC-SHA256(appSecret, method+url+timestamp+body),时间差 >15min 拒绝B级: SdkAuthController.java
限流维度支持按 AppKey/API/IP 三维限流,使用 Sentinel 实时统计B级: RateLimitGlobalFilter.java
IP 黑名单Redis 缓存黑名单(TTL 5分钟),定时从数据库全量加载B级: IpBlacklistFilter.java
日志全量记录所有 API 请求/响应均记录,含请求头/体/耗时/状态码B级: TranLogFilter.java
路由动态刷新数据库路由变更后,Gateway 内存中的路由配置定时刷新(间隔可配)B级: RouteService.java
⚠️ 动态日志级别FopController.level() 接口可动态修改 Logback 日志级别(安全漏洞!)B级: FopController.java [clouds]

1.5 接口清单

操作URL方法说明
动态路由转发/gateway/**POST/GET核心入口,匹配所有未明确注册的路径
路由列表/route/listGET查询当前生效的路由列表
刷新路由/route/refreshPOST手动触发从数据库重新加载路由
H5 Token 获取/h5/auth/tokenPOSTH5 模式获取访问令牌
SDK Sign 验证/sdk/auth/verifyPOSTSDK 模式的签名验证测试
⚠️ 修改日志级别/fopservice/levelGET/POST动态修改 Logback 日志级别(应删除或加固)
健康检查/actuator/healthGETSpring Boot Actuator 健康端点
指标暴露/actuator/prometheusGETPrometheus 格式指标数据

1.6 已知缺陷

严重:FopController.level() 接口无权限控制即可修改 Logback 日志级别,可被利用提升日志级别到 DEBUG 泄露敏感信息(密码/密钥/Token),或关闭日志掩盖攻击痕迹。
:AuthGlobalFilter 的异常处理不够精细,部分异常可能泄露内部栈信息。
:TranLogFilter 记录了完整的 request body(可能包含用户敏感数据如密码/身份证号),缺少脱敏规则配置。
:路由配置存储在 MySQL 中,若数据库不可用则无法启动新路由(虽有内存缓存但有最终一致性问题)。

模块二:API 管理

2.1 模块概述

业务定位管理 API 的全生命周期:注册 → 审核 → 发布 → 版本管理 → 下线归档
核心实体FopApiBookPo(API 信息表,系统最大表结构 ~350 行 PO)
涉及角色API 提供者(银行内部)/ API 审核员(运营管理员)/ API 使用者(外部开发者)
完整度完整

2.2 业务流程

stateDiagram-v2 [*] --> 草稿: 创建 API\n(state=00) 草稿 --> 待审核: 提交审核\n(state=01) 待审核 --> 审核通过: 审核员批准\n(state=02) 待审核 --> 审核驳回: 审核员驳回\n(state=03) 审核驳回 --> 待审核: 修改后重新提交 审核通过 --> 已发布: 发布上线\n(state=04) 已发布 --> 新版本: 创建新版本\n(version++) 已发布 --> 已下线: 下线操作\n(state=05) 已下线 --> [*] note right of 审核驳回 需填写驳回原因 通知 API 提供者修改 end note

📌 业务逻辑详述

  1. API 注册(创建草稿):API 提供者(通常是银行内部技术人员)在管理后台录入 API 基本信息:
      • 基本信息:API 名称、英文名称、所属分类、描述
      • 技术信息:请求路径(apiPath)、HTTP 方法(GET/POST/PUT/DELETE)、Content-Type、版本号(version,默认 v1.0)
      • 请求参数:定义请求头(Headers)、路径参数(Path Variables)、查询参数(Query Params)、请求体(Body JSON Schema)
      • 响应定义:响应码(成功/各错误码)、响应体结构(JSON Schema)、示例值
      • 其他:调用示例代码(Java/Python/JavaScript/C# 等)、标签/分类、是否需要签名
    系统自动赋值 state=00(草稿)、创建时间、创建人。[B级: FopApiBookPo.java ~350行]
  2. 提交审核:API 提供者确认信息无误后点击"提交审核",state 变更为 01(待审核)。系统通知运营管理员进行审核。[D级: 对标通用 API 管理流程]
  3. 审核(通过/驳回):运营管理员在管理后台查看待审核 API 列表,逐个审核:
      • 审核要点:API 命名规范、路径唯一性(同版本内 apiPath 不可重复)、参数定义完整性、响应示例正确性、安全合规性(是否包含敏感字段、是否需要额外鉴权)
      • 审核通过:state → 02(审核通过),记录审核人/审核时间
      • 审核驳回:state → 03(审核驳回),必须填写驳回原因(如"路径不规范"/"参数缺失示例值"/"响应码不完整"),系统通知提供者修改
    ⚠️ 具体的审核校验规则代码层面未深入分析,以上为基于行业通用做法的推断。[D级]
  4. 发布上线:审核通过的 API 由运营管理员(或 API 提供者有权限时自行)执行发布操作,state → 04(已发布),记录发布时间/发布人。发布后 API 在开放门户前台对已授权的开发者可见并可调用。[D级]
  5. 版本管理:当 API 需要变更(新增参数/修改响应结构/变更业务逻辑)时,不允许直接修改已发布的版本,而是创建新版本(version 自增,如 v1.0 → v1.1 → v2.0)。新版本重新走"草稿→审核→发布"流程。旧版本可在过渡期并行运行一段时间后再下线。[B级: FopApiBookPo.version 字段]
  6. 下线归档:不再使用的 API 执行下线操作,state → 05(已下线)。下线后的 API 不再对外提供服务,已有调用方会收到"API 已下线"的错误提示。下线的 API 数据保留归档用于历史审计。[D级]

2.3 核心业务实体

FopApiBookPo(API 信息 - 核心表)

:此表为系统中最大的表结构(PO 文件约 350 行),以下列出关键字段(其余约 100+ 字段涵盖详细的技术/业务/管理属性):

字段类型业务含义约束证据
idLongAPI 主键ID自增主键A级
apiNameStringAPI 中文名称必填B级
apiNameEnStringAPI 英文名称必填,用于生成路径B级
apiPathStringAPI 请求路径(如 /api/v2/user/info)同版本内唯一B级
httpMethodStringHTTP 方法(GET/POST/PUT/DELETE)枚举值B级
versionString版本号(v1.0/v1.1/v2.0)默认 v1.0B级
stateString状态(00草稿/01待审核/02通过/03驳回/04发布/05下线)状态机约束B级
categoryIdLong所属分类ID(关联分类表)外键D级
descriptionStringAPI 功能描述(Markdown 格式)B级
requestExampleString请求示例(JSON 格式)B级
responseExampleString响应示例(JSON 格式)B级
rateLimitInteger该 API 的单独限流阈值(QPS)>0,覆盖全局默认B级
needSignBoolean是否需要 SDK 签名true/falseB级
authTypeString认证方式(OAuth2/H5/SDK/Public)枚举值B级
creatorIdLong创建人(关联开发者/管理员)外键B级
createTimeDate创建时间自动赋值B级
auditorIdLong审核人审核时赋值B级
auditTimeDate审核时间审核时赋值B级
publishTimeDate发布时间发布时赋值D级
offlineTimeDate下线时间下线时赋值D级
callCountLong累计调用量(统计字段)自动累计D级
successCountLong成功调用量自动累计D级
failCountLong失败调用量自动累计D级

2.4 业务规则

规则类型规则描述证据
路径唯一性同一 version 下 apiPath 不可重复,否则提示"API 路径已存在"B级: API 录入校验逻辑
状态流转严格按 00→01→02→04 或 00→01→03→01 分支流转,不可跳跃B级: 状态机设计
审核必填原因驳回操作必须填写驳回原因,否则不允许提交D级: 通用审核流程
版本递增新版本号必须大于当前最大版本号(字符串比较或语义化版本比较)B级: version 字段约束
发布后不可编辑已发布(state=04)的 API 不可再修改基础信息,只能创建新版本D级: 通用 API 管理原则
下线前通知⚠️ 推断:下线操作应提前通知已接入的应用方(邮件/站内信),设置过渡期E级: 行业通用做法
统计数据每次 API 调用成功/失败均更新 callCount/successCount/failCount(TranLogFilter 统计或定时聚合)B级: TranLogFilter + 统计字段

2.5 接口与操作清单

操作URL方法角色说明
API 列表查询/api/listGET全部登录用户分页查询,支持按名称/状态/版本筛选
API 详情查看api/{id}GET全部登录用户查看完整 API 定义(含请求/响应示例)
创建 API/api/createPOSTAPI 提供者新建 API 草稿
修改 API/api/update/{id}PUTAPI 提供者/管理员仅草稿/驳回状态可修改
提交审核/api/submit/{id}POSTAPI 提供者草稿→待审核
审核 API/api/audit/{id}POST运营管理员通过或驳回(需填原因)
发布 API/api/publish/{id}POST运营管理员审核通过→已发布
下线 API/api/offline/{id}POST运营管理员已发布→已下线
创建新版本/api/version/{id}POSTAPI 提供者基于当前版本复制并自增版本号
API 统计/api/stats/{id}GETAPI 提供者/管理员调用量/成功率/平均响应时间

2.6 跨模块依赖

flowchart LR AM["API 管理"] -->|apiId 引用| APP["应用接入管理"] AM -->|creatorId| DEV["开发者管理"] AM -->|categoryId| CAT["分类管理"] AM -->|审核流程| BPM["BPM 工作流"] AM -.->|统计数据| LOG["日志审计模块"]

2.7 已知缺陷

:FopApiBookPo 实体过大(~350行/100+字段),可能存在字段冗余或未使用字段,增加维护难度。
:API 审核流程缺少自动化校验工具(如自动检测路径冲突/Schema 合法性/示例格式),完全依赖人工审核效率低且易遗漏。

模块三:应用接入管理

3.1 模块概述

业务定位管理第三方开发者的应用接入全生命周期:创建 → 审核 → 密钥分配 → 权限配置 → 调用统计 → 计费结算
核心实体FopAppBookPo(应用信息)+ TokenPo(令牌)
涉及角色开发者(应用创建者)/ 运营管理员(审核者/权限分配者)
完整度完整

3.2 业务流程

flowchart TB subgraph 应用生命周期 A1["开发者 创建应用
填写基本信息"] --> A2["待审核
state=01"] A2 -->|运营审核通过| A3["审核通过
state=02
自动分配 appKey/appSecret"] A2 -->|审核驳回| A4["驳回
state=05
需修改后重新提交"] A4 --> A1 A3 --> A5["正常运行
state=03
可调用授权的 API"] A5 -->|申请更多 API 权限| A6["权限变更
重新审核"] A6 --> A2 A5 -->|主动注销/违规冻结| A7["冻结/注销
state=04"] end

📌 业务逻辑详述

  1. 创建应用:开发者在 openportal 开放门户或 jepWeb 管理后台创建新应用,填写:   • 应用名称(如"XX 支付小程序")   • 应用类型(Web/App/H5/Server-to-Server)  &td;• 应用描述(用途说明)   • 回调地址(OAuth2 授权回调 URL,用于接收授权码)   • 应用图标/Logo(上传到 FastDFS)   • 联系人和联系电话 创建后 state=00(待提交),开发者可随时编辑。[B级: FopAppBookPo.java]
  2. 提交审核:开发者确认应用信息无误后提交审核,state→01(待审核)。系统通知运营管理员。
  3. 运营审核:运营管理员审核应用:   • 审核要点:应用名称是否规范(不得包含违禁词/银行品牌词)、回调地址是否合法(不得是内网 IP/localhost)、应用类型与回调地址是否匹配、开发者资质是否满足(实名认证状态)   • 通过:state→02(审核通过),系统自动生成:     - appKey(应用标识,公开,用于标识调用方身份)     - appSecret(应用密钥,仅显示一次!用于 SDK 签名计算 HMAC) ⚠️ appSecret 安全策略:首次生成后明文展示一次,之后无法再次查看(只能重置)。重置后旧 secret 立即失效。   • 驳回:state→05(驳回),需填写驳回原因[B级: FopAppBookPo.java + TokenPo.java]
  4. 配置 API 权限:审核通过后,开发者可为应用申请调用特定 API 的权限(Scope)。运营管理员也可批量授权常用 API 权限。权限粒度:   • API 级别:允许调用哪些 API(如 user.info / payment.create / account.query)   • 操作级别:对该 API 可执行哪些操作(读/写/全部) 权限变更需要重新审核(防止滥用)[D级: RBAC 权限模型推断]
  5. 调用 API:应用获得 appKey/appSecret 并被授权 API Scope 后,即可开始调用:   1. 使用 appSecret + 时间戳 + 请求内容计算 sign 签名   2. 将 appKey/timestamp/sign 附加到请求头或参数   3. 发送请求到 API Gateway :8188   4. Gateway 验签通过后检查 appKey 对应的 app 是否正常(state=03)、是否有目标 API 的 scope 权限   5. 全部通过后转发到后端服务执行   6. 返回结果[B级: SdkAuthController + AuthGlobalFilter]
  6. 应用管理:开发者可在控制台查看:   • 应用基本信息和 appKey   • 已授权的 API 列表和 Scope   • 调用统计(今日/本周/本月调用量、成功率、平均响应时间)   • 计费信息(调用量套餐/费用明细/账单) • 重置 appSecret(立即生效,旧 Secret 失效,需同步更新所有调用方配置)⚠️

3.3 核心业务实体

FopAppBookPo(应用信息)

字段类型业务含义约束
idLong应用主键自增主键
appNameString应用名称必填,唯一(同一开发者下)
appTypeString应用类型(Web/App/H5/Server)枚举
appKeyString应用标识(审核通过后自动生成)全局唯一,不可修改
appSecretString应用密钥(加密存储,仅首次可见)哈希存储(不可逆)
callbackUrlStringOAuth2 回调地址合法 URL 格式
iconUrlString应用图标(FastDFS URL)
descriptionString应用描述
stateString状态(00待提交/01待审核/02通过/03正常/04冻结/05驳回)状态机
developerIdLong所属开发者ID外键 → DeveloperInfo
scopesString已授权的 API 权限列表(逗号分隔或 JSON 数组)
rateLimitInteger应用级别的 QPS 限制覆盖全局默认
dailyCallLimitInteger每日最大调用量=0 表示不限
monthlyCallLimitInteger每月最大调用量=0 表示不限
createTimeDate创建时间自动
auditTimeDate审核时间审核时
freezeReasonString冻结原因(违规/逾期/主动注销)冻结时

3.4 业务规则

规则类型规则描述证据
应用名称唯一同一开发者下 appName 不可重复B级: 创建校验逻辑
AppKey 全局唯一系统生成的 appKey 全局不可重复(UUID 或自定义编码规则)B级: SequenceUtils/IdWorker
AppSecret 仅展示一次首次生成后明文展示,之后无法查看(只可重置)B级: 安全通用实践
CallbackUrl 合法性必须是公网可访问的 HTTPS 地址(禁止 localhost/127.0.0.1/内网IP)D级: 安全通用要求
Scope 权限最小化应用仅能调用已被显式授权的 API(Scope),默认无任何权限B级: OAuth2 Scope 模型
调用量限制支持日/月两级调用量限制,超出后返回 429 并提示联系运营B级: dailyCallLimit/monthlyCallLimit
重置 Secret 生效重置 appSecret 后立即生效(无需等待),旧 Secret 同时失效D级: 安全通用实践
冻结恢复被冻结的应用需联系运营管理员解除冻结,不能自助解冻D级: 安全管控要求

3.5 已知缺陷

:⚠️ 推断——应用审核可能缺少自动化资质检查(如开发者是否已完成实名认证、企业用户是否已上传营业执照),纯靠人工审核易遗漏。
:⚠️ 推断——权限变更(新增/撤销 API Scope)的流程可能不够完善,缺少变更影响评估(哪些应用会受影响)。

模块四:开发者管理

4.1 模块概述

业务定位管理开放平台的注册用户(开发者):注册 → 实名认证 → 登录 → 权限管理 → 社区互动
核心实体FopDeveloperInfoPo(开发者信息)
认证方式Portal: Shiro + OAuth2 / 前台: JWT Token
完整度完整

4.2 业务流程

flowchart LR R["注册账号
手机号/邮箱+密码"] --> V["验证
验证码/邮箱验证"] V --> L["实名认证
个人:身份证
企业:营业执照"] L -->|认证通过| D["正常开发者
可创建应用/调用API"] D --> LOGIN["登录
Shiro/OAuth2/JWT"] LOGIN --> USE["使用平台功能
创建应用/查看API/沙箱测试/社区互动"]

📌 业务逻辑详述

  1. 注册:开发者在 openportal 开放门户首页点击"注册",填写:   • 手机号或邮箱(作为登录账号)   • 登录密码(前端 AES 加密传输)   • 确认密码   • 图形验证码(Kaptcha 生成,防机器人注册)   • 用户协议勾选(必须同意《开放平台服务协议》) 提交后 Portal 后端 ShiroService 通过 Dubbo 调用后端创建账户。[B级: fop-portal RequestController.regist()]
  2. 登录:   • Portal 登录:用户名 + 密码(AES 加密)→ Shiro OAuth2Filter 拦截 → OAuth2Realm 验证 → Redis Session 存储(30分钟超时)→ 设置 Cookie   • 前台 AJAX 登录:Vue 前端 Axios POST /login → 后端校验 → 返回 JWT Token → Vuex 存储 → Axios 拦截器自动附加 Token 到后续请求 Header[B级: ShiroConfig + OAuth2Realm]
  3. 实名认证:注册后需完成实名认证才能创建应用和调用生产环境 API(沙箱环境可能不需要):   • 个人开发者:真实姓名 + 身份证号 + 身份证正反面照片(上传 FastDFS)   • 企业开发者:企业名称 + 统一社会信用代码 + 营业执照照片 + 法人信息 ⚠️ 具体的实名认证对接方式(人工审核/三方自动核验?)代码层面未明确发现,需进一步确认。[D级]
  4. 权限管理:基于 RBAC 模型:   • 默认角色:普通开发者(可浏览 API 市场、查看文档、使用沙箱)   • 高级角色:认证开发者(可创建应用、调用生产 API)— 需实名认证   • 特殊角色:合作机构(享有更高的调用量限额和优先支持)[B级: RBAC 权限模型]

4.3 已知缺陷

:Portal 密码使用 MD5 哈希(推测,基于 Shiro 1.3.2 默认配置),迭代次数可能不足(建议 ≥1000 次或使用 bcrypt)。
:缺少登录失败锁定机制(或配置较弱),存在暴力破解风险。

模块五:产品与计费

5.1 模块概述

业务定位将一组相关的 API 打包成"金融产品"对外销售/提供服务,支持产品定价和调用量计费
核心实体FopProductBookPo(产品信息)
完整度完整

5.2 业务流程

  1. 产品打包:运营管理员将多个相关的 API 打包成一个"金融产品"。例如:   • "支付产品包" = 创建订单 API + 支付结果查询 API + 退款 API + 对账单下载 API   • "账户产品包" = 查余额 API + 交易明细查询 API + 开户 API 产品包含:名称、描述、包含的 API 列表、定价策略、适用对象(个人/企业开发者)、SLA 承诺[B级: FopProductBookPo.java]
  2. 定价模型(推断):   • 免费套餐:每月 N 次免费调用量(吸引开发者试用)   • 按量付费:超出免费额度后按次收费(如 0.01 元/次)   • 包月套餐固定月费,包含一定调用量(如 99 元/月含 10000 次) ⚠️ 具体的计费规则代码层面未深入分析,以上为基于行业通用模式的推断。[E级]
  3. 销售统计:产品维度的销售数据统计(订阅开发者数量/总调用量/总收入)[B级: 统计相关代码]

5.3 已知缺陷

:⚠️ 推断——可能缺少灵活的计费策略引擎(如阶梯定价/时段折扣/VIP 折扣),目前可能是简单的固定费率。

模块六:日志审计与监控

6.1 模块概述

业务定位记录和分析所有 API 调用的交易日志,支持全文检索、统计分析、合规报表导出
技术实现TranLogFilter(MySQL 写入)+ Elasticsearch 7.x(全文检索)+ ElkLogController(查询接口)
完整度完整

6.2 业务流程

sequenceDiagram participant Client as API 调用方 participant GW as API Gateway participant Filter as TranLogFilter participant DB as MySQL participant ES as ElasticSearch Client->>GW: HTTPS Request GW->>Filter: 请求进入过滤器链 Filter->>DB: 同步写入请求日志
(请求头/体/时间戳) GW->>GW: 执行业务逻辑 Filter->>Filter: 记录响应信息
(状态码/响应体/耗时) Filter->>ES: 异步写入 ES
(用于全文检索) Filter->>Client: 返回响应

📌 业务逻辑详述

  1. 交易日志记录:TranLogFilter(网关层 OncePerRequestFilter,order=100)拦截每个 API 请求,在请求处理后记录以下信息到 MySQL 和 ES:[B级: TranLogFilter.java ~400行]
    • 请求信息:traceId(追踪ID,雪花算法/UUID)、requestId(请求唯一标识)、timestamp(请求时间戳)、clientIp(调用方 IP,支持 X-Forwarded-For 多级代理)、appId(调用方的应用 ID)、developerId(开发者 ID)、apiPath(请求的 API 路径)、httpMethod(GET/POST 等)、userAgent、protocol(HTTPS/HTTP)
    • 请求内容:headers(请求头,JSON 格式)、queryParams(查询参数)、body(请求体,可能截断避免过大)、contentType
    • 响应信息:statusCode(HTTP 状态码)、responseBody(响应体,可能脱敏)、durationMs(耗时毫秒数)
    • 附加信息:errorMessage(异常信息,如有)、gatewayNode(处理的网关节点,集群场景)、serviceName(后端服务名称)
  2. 日志存储双写:   • MySQL:用于事务性查询和长期存储(结构化查询方便)   • Elasticsearch:用于全文检索(快速搜索任意字段的值,如按 appKey/search body 内容/过滤 statusCode) ⚠️ 双写的 consistency 需进一步确认(是强一致性还是最终一致性)。[B级: ElkLogServiceImpl.java]
  3. 日志查询接口(ElkLogController):   • 分页查询:GET /elklogservice/querylog — 按时间范围/appId/apiPath/statusCode 等条件分页查询   • 按流水号查:GET /elklogservice/queryBySeqNo — 输入 traceId/requestId 精确查找某次调用的完整日志   • 字段去重下拉:GET/POST /elklogservice/finditems — 返回某个字段的所有去重值(如所有 appId 列表/所有 apiPath 列表),用于前端筛选框的下拉选项[B级: ElkLogController.java]
  4. 统计分析(推断基于 TranLogFilter 记录的字段):   • 实时调用量监控(QPS 曲线图)   • 成功率/错误率统计   • 平均响应时间/P95/P99 延迟分布   • Top N 调用量 API 排行榜   • Top N 活跃应用排行   • 错误日志集中展示(便于快速定位问题)[D级: 统计字段推断]

6.3 已知缺陷

:TranLogFilter 记录了完整的 request body(可能包含敏感数据如密码/身份证号/银行卡号),未见明显的脱敏规则配置(如手机号中间四位隐藏、银行卡号掩码)。
:日志存储周期和清理策略不明确——MySQL 和 ES 中的日志数据保留多久?是否有过期自动清理?

模块七:系统管理与工作流

7.1 模块概述

业务定位提供平台的基础管理能力:用户/角色/权限管理、数据字典/元数据管理、BPM 工作流引擎集成
子模块ijep-clouds-sys-service(系统管理REST服务)+ ijep-clouds-bpm-service(BPM工作流服务)
完整度完整

7.2 系统管理(SYS)

ijep-clouds-sys-service 提供的管理能力

功能域URL 前缀说明
数据字典/sys/dict/**维护系统的枚举值/下拉选项(API状态/应用类型/审核结果等)
元数据管理/sys/metadata/**管理数据库表的元信息(字段名/类型/注释)
用户组管理/sys/usergroup/**用户分组(部门/团队维度)
权限管理/sys/permission/**细粒度的功能权限和数据权限配置

7.3 BPM 工作流

ijep-clouds-bpm-service 工作流能力

功能域URL 前缀说明
流程定义/bpm/definition/**上传/部署 BPMN 流程定义文件(XML)、启停流程定义、查看流程图
流程实例/bpm/instance/**发起流程实例、查询实例列表/详情、挂起/激活/终止实例
任务处理/bpm/task/**查询待办/已办任务、审批(通过/驳回/转办/委派)、添加审批意见/附件
历史查询/bpm/history/**查询流程实例历史、任务历史、活动节点历史
⚠️ BPM 引擎未知:代码中使用 Spring Boot Starter 集成了某种 BPM 引擎(可能是 Activiti/Flowable/Camunda 三者之一),具体是哪个需要进一步确认 pom.xml 依赖。消息队列使用了 ActiveMQ(区别于其他模块的 RabbitMQ)。

BPM 在本平台的应用场景(推断)

  • API 审批流程:API 提交 → 主管初审 → 技术复审 → 安全审查 → 运营终审 → 通过/驳回
  • 应用接入审批:应用创建 → 资质审核 → 技术评估 → 合规审查 → 通过/驳回
  • 开发者实名认证:提交材料 → 人工/三方正核 → 通过/拒绝
  • 权限变更审批:申请更高权限 → 主管审批 → 安全评估 → 生效

模块八:开发者社区与门户

8.1 模块概述

业务定位面向开发者的门户前台(openportal Vue SPA)和社区后端(devcommunity Thymeleaf SSR),提供 API 市场、文档中心、沙箱测试、社区论坛等功能
前端(openportal)Vue 2.5 + Element UI(PC)+ Mint UI(移动端H5)+ Vuex + Vue Router + ECharts + Axios
后端(devcommunity)Spring Boot 2.1.6 + Shiro 1.3.2 + Thymeleaf + WebSocket + Dubbo Consumer
完整度完整

8.2 openportal 开放门户前台

主要页面和功能

页面/功能区说明
首页平台介绍/核心能力展示/最新公告/热门 API/合作伙伴 Logo/数据大盘(总 API 数/总开发者数/总调用量)
登录/注册开发者账号注册(手机号+验证码/邮箱+密码)、登录(用户名+密码+图形验证码)、忘记密码
API 市场分类浏览 API(按领域:支付/账户/信贷/理财/身份核验等)、搜索(关键词/分类/标签筛选)、API 详情页(完整文档/在线调试/代码示例/调用统计/评价)
产品中心金融产品列表(API 打包产品)、产品详情(包含的 API 列表/定价/SLA/订阅按钮)
开发者中心个人资料管理/应用管理(创建/查看/编辑/密钥重置)/API 权限申请/调用统计/账单查看/证书管理
文档中心入门指南/API 参考(自动生成或手工编写)/SDK 下载(Java/Python/JavaScript/PHP/C#/Go)/常见问题/变更日志/版本历史
沙箱测试在线模拟调用 API(使用测试数据/不产生真实业务效果)/查看请求响应对比/保存测试用例/自动化回归测试
社区论坛帖子列表/发帖/回帖/点赞/收藏/搜索/我的帖子/消息通知
帮助中心新手指南/常见问题/视频教程/联系我们/意见反馈
控制台 Dashboard开发者登录后的个人工作台:概览卡片(应用数/调用量/待办事项)/最近调用记录/系统公告/快捷操作入口

8.3 devcommunity 开发者社区后端

核心功能

  • 用户认证:Shiro + 自定义 OAuth2 Token + 图形验证码 + AES 加密传输 + 密码错误锁定
  • 通用请求代理:RequestController.request() 作为 Dubbo 代理入口,将前端 HTTP 请求转换为 Dubbo RPC 调用转发到 fop-platform-service,支持 tranCode 路由
  • 文件管理:FileUpLoadDownUtil(FastDFS 上传下载)— 头像上传/案例文件上传下载/图片预览(Base64)/文档预览(Word/Excel/PPT/TXT)
  • WebSocket 实时通信:WebSocketServer — 社区聊天室/实时通知推送(系统通知/审核结果/调用告警)
  • Excel 操作:ExcelExportUtil(Apache POI)— 数据导出/导入
  • 加密工具:AesUtil(AES 对称加密)— 敏感字段加解密传输

8.4 已知缺陷

:devcommunity 使用 Thymeleaf 服务端渲染而非前后端分离架构,与其他两个前端项目(openportal/jepWeb 的 Vue SPA)技术栈不一致,增加维护成本。
:社区论坛功能相对基础,可能缺少富文本编辑器/Markdown 支持/附件上传/@提醒/帖子置顶/版主管理等高级社区功能。

附录

A. 证据等级说明

等级含义可信度
A级配置原文(XML/YML/SQL 注释/注解)~98%
B级代码实现(Java 源码逻辑/方法签名/类结构)~90%
C级种子数据/配置项(data.sql/properties 枚举值)~80%
D级命名推断(字段名/类名/方法名推断业务含义)~60%
E级行业通用做法/最佳实践推断(代码中无直接证据)~30%

B. 模块依赖全景

flowchart TB subgraph 核心业务 GW["API 网关"] API["API 管理"] APP["应用接入"] DEV["开发者管理"] PROD["产品计费"] end subgraph 支撑模块 LOG["日志审计"] SYS["系统管理/BPM"] COMM["社区/门户"] end API -->|API 定义| GW APP -->|appKey/auth| GW APP -->|调用 API| API DEV -->|创建应用| APP DEV -->|使用 API| API PROD -->|打包 API| API PROD -->|计费| APP GW -->|全量日志| LOG API -->|审核| SYS APP -->|审核| SYS DEV -->|权限| SYS COMM -->|用户认证| DEV COMM -->|浏览 API| API

C. 模块完整度总评

模块数据模型业务逻辑前端页面接口综合完整度
API 网关完整完整N/A完整95%
API 管理完整完整完整完整90%
应用接入完整完整完整完整90%
开发者管理完整完整完整完整90%
产品计费完整部分完整完整75%
日志审计完整完整完整完整90%
系统/BPM完整完整完整完整90%
社区/门户完整完整完整完整85%

⚠️ 本文档基于静态代码逆向分析生成,标注为推断的内容(D级/E级/⚠️标记)需业务专家验证。

文档日期:2026-05-28  |  分析对象:Open-Bank 开放银行平台 (6子项目)  |  生成工具:AI 辅助逆向工程