--- name: REQ-008 description: 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` 模块的详细扫描和分析,发现了多个影响系统编译、安全性和稳定性的问题。这些问题需要立即修复,以确保系统的正常运行和数据安全。 ### 问题陈述 当前模块存在以下问题: 1. **语法错误**: DataiSfLoginHistoryController 和 DataiSfLoginSessionController 中存在多余的右括号,导致代码无法编译 2. **密码加密不安全**: 使用对称加密存储密码,可以解密还原明文,存在数据泄露风险 3. **敏感信息日志泄露**: 日志中记录了 Session ID、用户名等敏感信息,存在日志泄露风险 4. **缺少请求频率限制**: 登录接口没有请求频率限制,可能遭受暴力破解攻击 ### 目标 修复上述问题,确保系统能够正常编译运行,提高系统的安全性和稳定性。 ## 用户故事 (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) ### 技术栈 - [x] Java 21/22 - [x] Spring Boot 3.x - [x] MyBatis - [x] Salesforce API ### 接口要求 - [x] REST API - [ ] SOAP API - [ ] GraphQL API ### 数据库要求 - [x] MySQL - [ ] PostgreSQL - [ ] Oracle ### 安全要求 - [x] BCrypt 密码哈希算法 - [x] AES-256-GCM 加密算法 - [x] 请求频率限制(Rate Limiting) - [x] 日志脱敏处理 ## 依赖关系 (Dependencies) ### 前置需求 - [REQ-007](./REQ-007.md) - 查询不同类型ORG登录历史及自动登录功能 ### 后续需求 - [REQ-009](./REQ-009.md) - datai-salesforce-auth 模块短期优化事项(待创建) ### 外部依赖 - [Spring Security] - 用于请求频率限制 - [BCrypt] - 用于密码哈希 - [AES-256-GCM] - 用于敏感信息加密 ## 相关文档 (Related Documents) - [ADR 文档](../decisions/adr/0008-datai-salesforce-auth-immediate-fixes.md) - datai-salesforce-auth 模块立即修复架构决策 - [提示词文档](../prompts/008-datai-salesforce-auth-immediate-fixes.md) - datai-salesforce-auth 模块立即修复实现提示词(待创建) - [模块分析报告](../retros/20260116-datai-salesforce-auth-module-analysis-retro.md) - datai-salesforce-auth 模块分析报告(待创建) ## 详细修复项 ### 修复项 1: 语法错误修复 **位置**: - [DataiSfLoginHistoryController.java:82](../../datai-salesforce-auth/src/main/java/com/datai/auth/controller/DataiSfLoginHistoryController.java#L82) - [DataiSfLoginSessionController.java:82](../../datai-salesforce-auth/src/main/java/com/datai/auth/controller/DataiSfLoginSessionController.java#L82) **问题**: ```java return toAjax(dataiSfLoginHistoryService.insertDataiSfLoginHistory(DataiSfLoginHistoryDto.toObj(dataiSfLoginHistoryDto))); ``` 存在多余的右括号 `)))` **修复**: 移除多余的括号,改为: ```java return toAjax(dataiSfLoginHistoryService.insertDataiSfLoginHistory(DataiSfLoginHistoryDto.toObj(dataiSfLoginHistoryDto))); ``` ### 修复项 2: 密码加密方式调整 **位置**: [SalesforceLoginServiceImpl.java:125](../../datai-salesforce-auth/src/main/java/com/datai/auth/service/impl/SalesforceLoginServiceImpl.java#L125) **问题**: 使用对称加密存储密码,可以解密还原明文 ```java history.setPasswordEncrypted(EncryptUtils.encrypt(request.getPassword())); ``` **修复**: 使用不可逆的哈希算法(如 BCrypt) ```java history.setPasswordHash(BCrypt.hashpw(request.getPassword(), BCrypt.gensalt())); ``` **注意**: 需要修改数据库表结构,将 `password_encrypted` 字段改为 `password_hash`,并调整相关代码。 ### 修复项 3: 敏感信息日志脱敏 **位置**: [SalesforceLoginServiceImpl.java:62](../../datai-salesforce-auth/src/main/java/com/datai/auth/service/impl/SalesforceLoginServiceImpl.java#L62) **问题**: 日志中记录了 Session ID、用户名等敏感信息 ```java logger.info("Salesforce登录成功,Session ID: {}, 用户ID: {}, ORG类型: {}", result.getSessionId(), result.getUserId(), result.getOrgType()); ``` **修复**: 对敏感信息进行脱敏处理 ```java logger.info("Salesforce登录成功,Session ID: {}, 用户ID: {}, ORG类型: {}", maskSensitiveInfo(result.getSessionId()), maskSensitiveInfo(result.getUserId()), result.getOrgType()); ``` **脱敏方法**: ```java 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](../../datai-salesforce-auth/src/main/java/com/datai/auth/controller/DataISfLoginController.java) **问题**: 登录接口没有请求频率限制 **修复**: 添加请求频率限制,使用 Spring Security 或 Redis 实现 ```java @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 |