REQ-010-1 完成内容: - 创建 6 个数据库表设计(datai_meta_org_config、datai_meta_task、datai_meta_job_execution、datai_meta_component、datai_meta_deploy_history、datai_meta_job_log) - 设计了合理的索引策略 - 对敏感字段进行了加密存储设计 - 表名前缀统一为 datai_meta_ - 所有表包含标准基础字段 REQ-010-2 完成内容: - 补充用户故事和细化验收标准 - 创建架构决策记录(MyBatis Plus 注解 + XML 映射文件混合方案) - 对比了 3 种备选方案 - 分析了决策对系统架构、开发流程、运维管理的影响 - 识别了技术风险、业务风险和实施风险 - 定义了回滚策略和验收标准 文档更新: - 创建 0010-database-table-design.md 架构决策记录 - 创建 0011-entity-mapper-create.md 架构决策记录 - 创建 0020-database-table-design-create.md 变更记录 - 创建 20260117-database-table-design-create.md 会话记录 - 创建 20260117-database-table-design-create-retro.md 复盘报告 - 创建 011-database-table-design-create.md 提示词文档 - 更新 REQ-010-2.md 需求文档 - 更新 docs/index.md 和 CHANGELOG.md
7.4 KiB
7.4 KiB
| name | description |
|---|---|
| REQ-008 | datai-salesforce-auth 模块立即修复事项 |
需求: datai-salesforce-auth 模块立即修复事项
元数据 (Metadata)
- 需求编号: REQ-008
- 需求标题: datai-salesforce-auth 模块立即修复事项
- 需求类型: 非功能需求(Bug 修复和安全加固)
- 优先级: 高
- 状态: Draft
- 创建日期: 2026-01-16
- 最后更新: 2026-01-16
- 创建人: SSOT Architect
- 负责人: 待分配
需求描述 (Description)
背景
经过对 datai-salesforce-auth 模块的详细扫描和分析,发现了多个影响系统编译、安全性和稳定性的问题。这些问题需要立即修复,以确保系统的正常运行和数据安全。
问题陈述
当前模块存在以下问题:
- 语法错误: DataiSfLoginHistoryController 和 DataiSfLoginSessionController 中存在多余的右括号,导致代码无法编译
- 密码加密不安全: 使用对称加密存储密码,可以解密还原明文,存在数据泄露风险
- 敏感信息日志泄露: 日志中记录了 Session ID、用户名等敏感信息,存在日志泄露风险
- 缺少请求频率限制: 登录接口没有请求频率限制,可能遭受暴力破解攻击
目标
修复上述问题,确保系统能够正常编译运行,提高系统的安全性和稳定性。
用户故事 (User Story)
作为一个系统管理员, 我想要修复模块中的语法错误和安全漏洞, 以便于系统能够正常编译运行,并且数据安全得到保障。
验收标准 (Acceptance Criteria)
功能验收标准
- AC1: 修复 DataiSfLoginHistoryController 中的语法错误(多余的右括号)
- AC2: 修复 DataiSfLoginSessionController 中的语法错误(多余的右括号)
- AC3: 代码能够正常编译,无编译错误
- AC4: 登录功能正常工作,能够成功登录
- AC5: 自动登录功能正常工作,能够根据历史记录自动登录
- AC6: 添加请求频率限制,每分钟最多 5 次登录尝试
非功能验收标准
- 性能要求: 修复后不影响登录接口响应时间,响应时间 < 2 秒
- 安全要求: 密码使用不可逆的哈希算法(如 BCrypt)或更安全的加密算法(如 AES-256-GCM)
- 安全要求: 敏感信息在日志中进行脱敏处理,Session ID 只显示前 8 位
- 安全要求: 请求频率限制生效,超过限制时返回明确的错误信息
- 可用性要求: 修复后不影响现有功能,向后兼容
测试用例
| 用例编号 | 用例描述 | 预期结果 |
|---|---|---|
| TC-001 | 编译项目 | 项目能够正常编译,无编译错误 |
| TC-002 | 执行登录操作 | 登录成功,日志中敏感信息已脱敏 |
| TC-003 | 连续登录 6 次(超过频率限制) | 第 6 次登录被拒绝,返回频率限制错误 |
| TC-004 | 查看登录历史 | 密码字段已使用安全算法加密,无法直接解密 |
| TC-005 | 查看日志文件 | 日志中 Session ID 只显示前 8 位,敏感信息已脱敏 |
技术要求 (Technical Requirements)
技术栈
- Java 21/22
- Spring Boot 3.x
- MyBatis
- Salesforce API
接口要求
- REST API
- SOAP API
- GraphQL API
数据库要求
- MySQL
- PostgreSQL
- Oracle
安全要求
- BCrypt 密码哈希算法
- AES-256-GCM 加密算法
- 请求频率限制(Rate Limiting)
- 日志脱敏处理
依赖关系 (Dependencies)
前置需求
- REQ-007 - 查询不同类型ORG登录历史及自动登录功能
后续需求
- REQ-009 - datai-salesforce-auth 模块短期优化事项(待创建)
外部依赖
- [Spring Security] - 用于请求频率限制
- [BCrypt] - 用于密码哈希
- [AES-256-GCM] - 用于敏感信息加密
相关文档 (Related Documents)
- ADR 文档 - datai-salesforce-auth 模块立即修复架构决策
- 提示词文档 - datai-salesforce-auth 模块立即修复实现提示词(待创建)
- 模块分析报告 - datai-salesforce-auth 模块分析报告(待创建)
详细修复项
修复项 1: 语法错误修复
位置:
问题:
return toAjax(dataiSfLoginHistoryService.insertDataiSfLoginHistory(DataiSfLoginHistoryDto.toObj(dataiSfLoginHistoryDto)));
存在多余的右括号 )))
修复: 移除多余的括号,改为:
return toAjax(dataiSfLoginHistoryService.insertDataiSfLoginHistory(DataiSfLoginHistoryDto.toObj(dataiSfLoginHistoryDto)));
修复项 2: 密码加密方式调整
位置: SalesforceLoginServiceImpl.java:125
问题: 使用对称加密存储密码,可以解密还原明文
history.setPasswordEncrypted(EncryptUtils.encrypt(request.getPassword()));
修复: 使用不可逆的哈希算法(如 BCrypt)
history.setPasswordHash(BCrypt.hashpw(request.getPassword(), BCrypt.gensalt()));
注意: 需要修改数据库表结构,将 password_encrypted 字段改为 password_hash,并调整相关代码。
修复项 3: 敏感信息日志脱敏
位置: SalesforceLoginServiceImpl.java:62
问题: 日志中记录了 Session ID、用户名等敏感信息
logger.info("Salesforce登录成功,Session ID: {}, 用户ID: {}, ORG类型: {}",
result.getSessionId(), result.getUserId(), result.getOrgType());
修复: 对敏感信息进行脱敏处理
logger.info("Salesforce登录成功,Session ID: {}, 用户ID: {}, ORG类型: {}",
maskSensitiveInfo(result.getSessionId()),
maskSensitiveInfo(result.getUserId()),
result.getOrgType());
脱敏方法:
private String maskSensitiveInfo(String info) {
if (StringUtils.isEmpty(info)) {
return "null";
}
if (info.length() <= 8) {
return info.substring(0, 2) + "******";
}
return info.substring(0, 4) + "******" + info.substring(info.length() - 4);
}
修复项 4: 请求频率限制
位置: DataISfLoginController.java
问题: 登录接口没有请求频率限制
修复: 添加请求频率限制,使用 Spring Security 或 Redis 实现
@RateLimiter(value = 5, timeout = 60, timeUnit = TimeUnit.SECONDS)
@Operation(summary = "执行Salesforce登录操作(源ORG)")
@PostMapping("/doLogin")
public AjaxResult login(@RequestBody SalesforceLoginRequest request) {
// 登录逻辑
}
配置: 每分钟最多 5 次登录尝试
变更历史 (Change History)
| 日期 | 版本 | 变更内容 | 变更人 |
|---|---|---|---|
| 2026-01-16 | 1.0.0 | 初始版本,定义立即修复事项 | SSOT Architect |