# java_test **Repository Path**: daimingfeng/java_test ## Basic Information - **Project Name**: java_test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-26 - **Last Updated**: 2026-04-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring MVC Bank Risk Multi Apps 用于静态代码风险检测的多应用 Spring MVC 示例(仅后端静态代码)。 ## 应用列表 - `bank-gateway`:网关应用,模拟入口转发。 - `bank-core`:核心交易应用,模拟扣款与幂等处理。 - `bank-batch`:批处理应用,模拟账单导入。 ## 风险与防护接口 ### bank-gateway - 风险接口:`POST /gateway/relay-risk`(未校验签名、未校验重复 `requestId`,直接透传)。 - 防护接口:`POST /gateway/relay-safe`(要求 `sign` + `requestId`,并做重放拦截)。 ### bank-core - 风险接口:`POST /core/payment/debit-risk`(无幂等校验)。 - 防护接口:`POST /core/payment/debit-safe`(`requestId` 去重)。 ### bank-batch - 风险接口:`POST /batch/statement/import-risk`(无报文大小限制)。 - 防护接口:`POST /batch/statement/import-safe`(限制最大 8192 字符)。 ## 分层与调用链 ### gateway 调用链 - `GatewayController -> GatewayRelayService -> GatewayRelayAuditRepository` - 幂等防护链路额外调用:`GatewayReplayGuardRepository`(按 `requestId` 去重) ### core 调用链 - `CorePaymentController -> CorePaymentService -> CoreRiskLedgerRepository`(风险链路) - `CorePaymentController -> CorePaymentService -> IdempotencyRecordRepository -> CoreSafeLedgerRepository`(防护链路) - `CorePaymentMybatiscService -> CorePaymentMybatiscRepository -> CorePaymentMybatiscMapper(XML SQL)`(关系型数据库示例链路,不接入运行时) ### batch 调用链 - `BatchStatementController -> BatchStatementService -> BatchImportRepository` ## 测试对照(幂等性) ### 1) 核心交易风险接口(重复请求会重复扣款) ```bash curl -X POST http://localhost:8080/core/payment/debit-risk \ -H "Content-Type: application/json" \ -d '{"requestId":"REQ-1001","accountNo":"62220001","amount":"100.00"}' ``` 重复执行同样请求,`totalDebit` 会持续增长。 ### 2) 核心交易防护接口(重复请求会被拦截) ```bash curl -X POST http://localhost:8080/core/payment/debit-safe \ -H "Content-Type: application/json" \ -d '{"requestId":"REQ-2001","accountNo":"62220001","amount":"100.00"}' ``` 首次成功,再次发送相同 `requestId` 会返回 `duplicate blocked`。 ### 3) 网关风险接口(可重放) ```bash curl -X POST http://localhost:8080/gateway/relay-risk \ -H "Content-Type: application/json" \ -d '{"requestId":"GW-3001","sign":"demo-sign","accountNo":"62220001","amount":"88.00"}' ``` 重复发送同样请求,网关仍会继续放行。 ### 4) 网关防护接口(网关侧拦截重放) ```bash curl -X POST http://localhost:8080/gateway/relay-safe \ -H "Content-Type: application/json" \ -d '{"requestId":"GW-4001","sign":"demo-sign","accountNo":"62220001","amount":"88.00"}' ``` 首次成功,再次发送相同 `requestId` 会返回 `duplicate blocked in gateway`。 ## 说明 - 该工程用于 SAST/规则验证/告警演示。 - 代码中风险点均为故意保留,不可用于生产。 - `bank-core/src/main/resources/mybatisc` 下新增了关系型数据库 SQL 与 MyBatis Mapper 示例,便于扫描器识别 SQL/Mapper/幂等表唯一约束等规则。