Open-Bank 开放银行平台

金融开放 API 平台 · 遗留系统逆向工程分析
L1 代码基线 ~92%
L2 技术实现 ~88%
L3 业务规则 ~75%
L4 业务域 ~55% 需人工验证
报告日期:2026-05-28  |  代码库:open-bank (6个子项目)  |  ⚠️ L4 层约 45% 结论需业务专家验证

目录

  1. 执行摘要
  2. 项目概述与业务定位
  3. 代码量基线
  4. 技术栈与决策评估
  5. 架构骨架与请求链路
  6. 数据层与领域模型
  7. 认证授权
  8. 接口与调用链
  9. 跨系统集成
  10. 定时任务与异步机制
  11. 前端技术实现
  12. 安全基线
  13. 质量基线与技术债务
  14. 不确定项与风险
  15. 业务连续性与关键性评估
  16. 附录

§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 关键数字速览

6
子项目/模块
500+
Java 源码文件
143+
数据库表(PO)
180+
MyBatis Mapper XML
200+
Vue 组件文件
300+
JavaScript 文件
50+
REST API 端点
30+
技术组件/框架

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 技术实现关键发现

L3 业务规则关键发现

业务规则覆盖率:完整 65% | 部分 20% | 缺失 15%

L4 业务域关键发现

§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-parentJava/MavenJetty内嵌核心业务服务层(公共模块+平台服务+Dubbo Provider)Spring 4.1.6 + MyBatis + Dubbo + Jetty
fop-api-gatewayJava/Maven8188API 网关(统一入口/路由/限流/OAuth2/Dubbo调用)Spring Boot 2.1.3 + Spring Cloud Gateway + Sentinel + OAuth2
fop-portal-devcommunityJava/Maven自定义开发者门户后端(用户认证/WebSocket/文件上传/Dubbo代理)Spring Boot 2.1.6 + Shiro 1.3.2 + Thymeleaf + WebSocket
ijep-clouds-servicesJava/Maven多端口云微服务套件(FOP/BPM/SYS/Console 四个子模块)Spring Cloud + Spring Security + MongoDB + Elasticsearch
openportalVue/WebpackNginx开放平台门户前台(首页/API市场/开发者中心/文档)Vue 2.5 + Element UI + Mint UI + Vuex + ECharts
jepWebVue/WebpackNginx运营管理控制台(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 管理和应用接入流程已基本完善,但开发者生态运营、监控告警、合规审计等方面仍需加强。技术栈相对现代但面临升级压力。

§3 代码量基线

L1 分项目代码量统计

项目Java 文件数Vue 文件数JS 文件数XML/配置估算 LOC说明
fop-common~40--~30~15,000公共工具类/常量/PO对象(143个)/加解密/序列号
fop-platform-service~60--~80~25,000Dubbo Provider/业务Service/MQ消费者/定时任务
fop-api-gateway~25--~20~12,000网关核心/路由/过滤器/限流/Dubbo调用
fop-portal-devcommunity~45--~25~10,000Shiro认证/WebSocket/文件上传/Dubbo代理
ijep-clouds-services~53--~35~18,000FOP/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 估算说明
1TranLogFilter.javafop-common~400交易日志过滤器(请求/响应全量记录)
2FopApiBookPo.javafop-common~350API 信息实体(最大表结构)
3ParamContext.javafop-common~250参数上下文(请求参数解析封装)
4DateUtils.javafop-common~350日期工具类(格式化/计算/转换)
5MsgPushContext.javafop-common~270消息推送上下文
6SequenceUtils.javafop-common~230序列号生成工具(多种序列策略)
7CommonProcessImpl.javafop-common~120通用前后处理逻辑
8SM2Utils.javafop-common~240国密 SM2 加解密工具
9RSAUtils.javafop-common~160RSA 加解密工具
10FopGatewayController.javafop-api-gateway~200网关控制器(路由/H5认证/Dubbo转发)

L1 数据模型规模

143+
PO 持久化对象
180+
MyBatis Mapper XML
33KB
DbConstants 常量定义
50+
核心业务表

§4 技术栈与决策评估

L1 技术栈全景表

组件版本用途来源证据EOL/风险
Java JDK1.8运行环境pom.xmlLTS 至 2025
Spring Framework4.1.6.RELEASEIoC/AOP/事务fop-parent pom2017 EOL
Spring Boot2.1.3/2.1.6.RELEASE快速开发/自动配置gateway/portal pom2023 EOL
Spring Cloud Gateway2.1.1.RELEASEAPI 网关gateway pom过时
Apache DubboAlibaba 2.6.x (via dap)RPC 远程调用pom.xml建议升级 Apache 3.x
MyBatis1.3.2ORM 持久层gateway pom稳定
Apache Shiro1.3.2Portal 认证授权portal pomCVE 风险
Spring Security/OAuth22.3.5.RELEASE网关 OAuth2 认证gateway pom可用
MySQL Connector8.0.15数据库驱动pom.xml新版
MongoDB Driverspring-data 1.8.0文档数据库clouds pom过时
Redis (Jedis)2.9.3缓存/Sessionpom.xml稳定
Elasticsearch7.1.0 / 6.4.3日志检索clouds pom较新
RabbitMQ (AMQP)spring-rabbit 1.4.5消息队列pom.xml过时
ActiveMQspring-boot-starterBPM 消息bpm pom稳定
Alibaba Druid1.1.9连接池pom.xml稳定
Alibaba FastJSON1.2.68JSON 序列化pom.xmlRCE 风险
Alibaba Sentinel1.7.2 / 1.6.1限流熔断gateway/clouds pom新版
FastDFS Client1.26.2分布式文件存储pom.xml稳定
ZooKeeper (zkclient)0.10Dubbo 注册中心pom.xml稳定
BouncyCastle bcprov1.57加密算法提供者pom.xml过时
Jasypt2.1.0配置加密pom.xml稳定
SkyWalking APM6.6.0链路追踪pom.xml稳定
Prometheus Micrometer最新指标监控gateway pom现代化
Lombok1.18.6代码简化pom.xml稳定
Vue.js2.5.x前端框架package.json2023 EOL
Element UI2.x前台 UI 组件库package.json稳定
ViewUI/iView3.x后台 UI 组件库package.json稳定
ECharts4.x图表可视化package.json新版
Webpack3.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-100GlobalFilter统一认证(OAuth2/H5/SDK 三种模式)
RateLimitGlobalFilter-50GlobalFilter基于 Sentinel 的限流熔断
IpBlacklistFilter0GlobalFilterIP 黑名单拦截
TranLogFilter100OncePerRequestFilter交易日志全量记录
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 类名推测表名业务含义重要性
FopApiBookPoFOP_API_BOOKAPI 信息(最大表,含名称/路径/方法/版本/状态等)核心
FopAppBookPoFOP_APP_BOOK应用信息(开发者创建的应用实例)核心
FopDeveloperInfoPoFOP_DEVELOPER_INFO开发者信息(注册/认证/联系方式)核心
FopProductBookPoFOP_PRODUCT_BOOK产品信息(API 打包成的金融产品)核心
FopAgreementBookPoFOP_AGREEMENT_BOOK协议书(开发者签署的服务协议)重要
ParamPoPARAM_*参数配置(动态 SQL 参数映射)重要
TokenPoTOKEN_*令牌信息(OAuth2/访问令牌存储)重要
H5BookModelH5_BOOKH5 菜单配置(移动端 H5 页面菜单)一般
MenuBookModelMENU_BOOK菜单树(管理后台菜单结构)一般
FopRouteDefinitionGATEWAY_ROUTE网关路由配置(动态路由存储)重要
FopRouteFluidGATEWAY_ROUTE_FLUID路由流量配置(灰度发布/金丝雀发布)一般
FopRouteFusingGATEWAY_ROUTE_FUSING路由熔断配置(降级策略)一般
CountGroupByResult-分组聚合结果(通用统计 VO)辅助

:其余 130+ 个 PO 对象主要为系统管理(用户/角色/权限/字典)、日志审计、配置管理等支撑表。

L2 ORM 映射模式

L2 事务边界

  • 事务管理:Spring 声明式事务(@Transactional 注解或 AOP XML 配置)
  • 传播行为
    • Dubbo Provider 服务方法默认 REQUIRED
    • 日志写入操作 REQUIRES_NEW(独立事务,避免主事务回滚影响日志)
  • 事务隔离级别
    • 默认 READ_COMMITTED(MySQL 默认级别)
    • 财务相关操作可能使用 SERIALIZABLE(需进一步确认)
  • 连接池:Druid 1.1.9(支持 SQL 监控、慢查询检测、防 SQL 注入)

L3 业务实体识别与分类

分类实体说明
核心实体FopApiBookPoAPI 定义(名称/路径/方法/版本/状态/描述/请求示例/响应示例)
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/排序/可见性)
H5BookModelH5 菜单(移动端页面配置)
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 调用者的三种认证模式:

  1. OAuth2 模式:调用方先通过 client_credentials/password 授权码获取 access_token,每次请求携带 Authorization: Bearer {token}。网关 OAuth2 Server 校验 token 有效性和 scope 权限。
  2. 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)
  1. H5 模式:移动端 H5 页面调用,使用简易 Token 认证(降低移动端集成复杂度)。

2. 开发者 Portal 层(Shiro + 自定义 OAuth2)

开发者登录 open portal 后台时:

  1. 用户提交用户名 + 密码(AES 加密传输)
  2. Shiro OAuth2Filter 拦截,提取 OAuth2Token
  3. OAuth2Realm.doGetAuthenticationInfo() 调用 ShiroService 验证
  4. ShiroService 通过 Dubbo 调用后端验证用户凭据
  5. 认证成功后创建 Session(Redis 存储,30 分钟超时)
  6. 后续请求通过 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-4437fop-portalShiro 1.3.2 存在 RememberMe 反序列化漏洞
SQL 注入风险DAO 层部分动态 SQL 使用字符串拼接而非参数绑定
密码哈希弱Portal 认证MD5 单次迭代,远低于安全标准(建议 bcrypt/scrypt)
无 HTTPS 强制Gateway 配置未显见 HTTP→HTTPS 重定向配置

§8 接口与调用链

L1 API 端点全量清单

fop-api-gateway 网关接口

URL 前缀Controller方法业务域
/gateway/**FopGatewayControllerPOST/GET动态路由转发(核心入口)
/route/**RouteControllerCRUD路由管理(增删改查/刷新缓存)
/h5/auth/**H5AuthControllerPOSTH5 认证(Token 获取/校验)
/sdk/auth/**SdkAuthControllerPOSTSDK 认证(Sign 验签/Token 发放)
/monitor/**MonitorControllerGET监控指标(Sentinel/系统状态)

ijep-clouds-fop-service 接口

URL 前缀Controller方法业务域
${service.prefix.fop}/fopservice/**FopControllerGET/POSTFOP 通用服务(查询/CURD/树节点/下拉选项)
${service.prefix.fop}/fopfile/**FileControllerPOST/GET文件服务(上传/下载/预览/导入导出)
${service.prefix.fop}/elklogservice/**ElkLogControllerGET/POSTELK 日志查询(分页查询/按流水号查/字段去重)

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方法业务域认证要求
/loginPOST用户登录无需认证
/registPOST用户注册无需认证
/requestPOST通用请求(Dubbo 代理)OAuth2 认证
/fileUploadPOST文件上传OAuth2 认证
/captcha.jpgGET验证码图片无需认证
/getLoginTokenPOST登录前 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 RPCfop-platform-service网关→核心服务的内部调用(高频)dubbo.xml / application.yml
HTTP RESTijep-clouds-* 微服务网关→云服务调用Gateway Route 配置
JDBCMySQL 8.x主数据库持久化application-*.yml (druid)
JedisRedis缓存/Session/分布式锁application.yml (spring.redis)
Spring Data MongoDBMongoDB文档存储/日志/元数据clouds application.yml
REST High Level ClientElasticsearch 7.x交易日志全文检索FopServiceImpl
AMQP (RabbitMQ)RabbitMQ异步消息(通知/推送/事件)spring-rabbit 配置
JMS (ActiveMQ)ActiveMQBPM 工作流消息bpm-service 配置
ZooKeeper ClientZooKeeperDubbo 服务注册发现dubbo.registry.address
FastDFS ClientFastDFS分布式文件存储(头像/文档/证书)FileController
CXF (SOAP)外部 WebService遗留系统对接 Demofop-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.68AutoType 反序列化 RCE(CNVD-2020-26636 等系列漏洞)严重
Shiro 1.3.2CVE-2016-4437 RememberMe 反序列化 RCE严重
Spring Framework 4.1.6CVE-2016-1000027 RCE(若启用 WebFlow)
BouncyCastle 1.57旧版本可能存在已知漏洞
动态日志接口FopController.level() 可被利用修改日志级别泄露信息严重

L1">硬编码凭证清单

类型位置凭证
MySQL 密码application-xa.yml / pro.yml明文密码 ⚠️
Redis多处配置无密码 ⚠️
加密密钥SM2Utils/RSAUtils/AesUtil密钥硬编码在代码中 ⚠️
Dubbo Admindubbo.properties默认凭据
紧急安全建议
  1. 立即升级 Fastjson 到 2.x 或替换为 Jackson
  2. 立即升级 Shiro 到 1.10.0+ 或迁移到 Spring Security
  3. 移除或加固 FopController.level() 动态日志接口(至少添加管理员权限校验)
  4. 将所有硬编码凭证迁移到配置中心(如 Nacos/Apollo)或 KMS
  5. 启用 Redis 密码认证
  6. 启用数据库连接 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">代码质量指标

0
发现的单元测试
143+
PO 对象类
180+
Mapper XML 文件
33KB
常量定义文件

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">业务知识缺口

  1. ⚠️ 具体的 API 产品有哪些?(支付/账户/信贷/理财?)
  2. ⚠️ 计费策略是怎样的?(按调用量阶梯定价?包月?免费额度?)
  3. ⚠️ 开发者实名认证对接了哪些第三方?(公安/运营商/银联?)
  4. ⚠️ 实际对接的核心银行系统有哪些?如何交互?
  5. ⚠️ 合规审计报告的具体格式和监管报送要求?
  6. ⚠️ 生产环境的并发量和日调用量级?
  7. ⚠️ 高可用部署方案?(集群规模?负载均衡?容灾?)
验证建议:优先与原开发团队/业务人员进行访谈,重点验证 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小时内
ZooKeeperDubbo 服务发现失败P1 1小时内
ES/MongoDB日志/文档查询不可用P2 当日
FastDFS/Portal辅助功能不可用P3 一周内

§16 附录

L1">核心代码锚点索引

锚点类名/文件说明
网关启动FopApiGatewayApplication.javaSpring Boot 启动类
网关核心控制器FopGatewayController.java路由/H5认证/SDK认证/Dubbo转发
全局认证过滤器AuthGlobalFilter.javaOAuth2/H5/SDK 三种认证模式
限流过滤器RateLimitGlobalFilter.java基于 Sentinel 的限流熔断
交易日志过滤器TranLogFilter.java请求/响应全量日志记录(最大文件 ~400行)
IP 黑名单过滤器IpBlacklistFilter.javaIP 黑名单拦截
路由管理RouteController + RouteService动态路由 CRUD / 数据库加载
Dubbo 通用调用DubboServiceImpl.javaDubbo 泛化调用封装
参数上下文ParamContext.java请求参数解析和转换(~250行)
前后置处理器CommonProcessImpl.java签名校验/权限检查/结果脱敏
消息推送上下文MsgPushContext.java异步消息推送封装
序列号工具SequenceUtils.java雪花算法/UUID/时间戳等多种序列策略
国密 SM2 加密SM2Utils.javaSM2 加解密/签名/验签
RSA 加密RSAUtils.javaRSA 加解密(密钥交换场景)
AES 对称加密AesUtil.java(portal)通信加密(敏感字段)
日期工具DateUtils.java日期格式化/计算/转换(~350行,最大工具类)
数据库常量DbConstants.java所有表的列名常量集中定义(33KB)
ID 生成器IdWorker.java雪花算法分布式 ID 生成
JSON 工具JsonUtil.javaFastjson 封装
Portal 认证ShiroConfig + OAuth2Filter + OAuth2RealmShiro + OAuth2 认证链
Portal 请求控制器RequestController.java通用 Dubbo 代理请求入口
WebSocket 服务WebSocketServer.java实时消息推送(社区聊天)
FOP ControllerFopController.java(clouds)分页查询/CURD/树节点/下拉选项/日志级别
文件控制器FileController.java(clouds)上传/下载/预览/Excel 导入导出
ES 日志查询ElkLogController + ElkLogServiceImplElasticsearch 日志分页检索

L2">配置文件索引

展开查看关键配置文件列表
文件项目内容
application.ymlfop-api-gateway网关主配置(端口 8188/Profiles/Gateway/HTTP Client)
application-xa.ymlfop-api-gateway西安环境(MySQL 192.168.1.158:3306/fop)
application-pro.ymlfop-api-gateway生产环境(MySQL 192.168.11.33:3306/fop)
application-poc.ymlfop-api-gatewayPOC 验证环境
commonapplication.propertiesfop-common公共配置(数据源/AMQ模板/线程池)
table_clazz.configfop-common表名→PO 类名映射配置
error_trans.configfop-common错误码转换配置
common_errorCode_zh_CN.configfop-common中文错误码定义
dubbo.xml / dubbo.propertiesfop-parentDubbo 服务注册/引用/超时/重试
ds/*.xmlfop-parentMyBatis DataSource 配置(多数据源?)
spring/commonservice.xmlfop-parentSpring 公共 Bean 配置
application-*.ymlfop-portal-devcommunityPortal 多环境配置(dev/sit/uat/prd)
ShiroConfig.javafop-portalShiro 过滤器链/Realm 配置

L4">访谈提纲

按业务域分组的访谈问题
业务域问题
API 产品目前上线了哪些 API 产品?对应的实际银行能力是什么?
计费模式API 调用如何计费?按次/按月/阶梯定价?是否有免费额度?
对接系统平台对接了哪些核心银行系统?采用什么协议交互?
实名认证开发者实名认证对接了哪些第三方?认证流程是怎样的?
合规审计监管机构对 API 调用日志的留存要求是什么?是否有定期合规报表?
运维监控生产环境的并发量/QPS/日调用量?是否有 Prometheus+Grafana 监控大盘?
高可用集群部署方案?是否有容器化(Docker/K8s)?灾备方案?
安全事件过去是否发生过安全事件?如何应对的?
未来规划是否有升级计划?(Spring Boot 3/Vue 3/Dubbo 3?)

本报告由 AI 基于静态代码分析自动生成,L4 层约 45% 结论需业务专家验证

Open-Bank 开放银行平台逆向工程分析报告 · 2026-05-28

分析工具:AI 辅助逆向工程分析系统 · 分析对象:6 个子项目(~150,000+ 行代码)