6.5 KiB
6.5 KiB
| name | description |
|---|---|
| REQ-007 | 查询不同类型ORG登录历史及自动登录功能 |
需求: 查询不同类型ORG登录历史及自动登录功能
元数据 (Metadata)
- 需求编号: REQ-007
- 需求标题: 查询不同类型ORG登录历史及自动登录功能
- 需求类型: 功能需求
- 优先级: 高
- 状态: 阶段1-需求定义与入库
- 创建日期: 2026-01-16
- 最后更新: 2026-01-18
- 创建人: SSOT Architect
- 负责人: 待分配
需求描述 (Description)
背景
当前系统支持通过 DataISfLoginController 进行 Salesforce 登录操作,包括源ORG和目标ORG的登录。系统已经实现了基本的登录、登出、获取当前登录信息和自动登录功能。但是,当前的 getCurrentLoginInfo 接口只能获取当前登录信息,无法查询历史登录记录。而 autoLogin 接口虽然支持自动登录,但只能使用最新的登录历史记录。
问题陈述
- 无法查询特定类型ORG(如Source、Target、Sandbox、Production等)的成功登录历史记录
- 无法基于指定的登录历史记录自动登录到对应的ORG环境
- 开发人员和测试人员需要在多个环境间切换时,需要重复输入登录凭证,效率较低
目标
- 提供查询不同类型ORG成功登录历史的接口
- 提供根据指定登录历史记录自动登录到对应ORG的接口
- 支持多种ORG类型(Source、Target、Sandbox、Production等)
- 提高多环境管理和切换的效率
用户故事 (User Story)
作为一个系统管理员, 我想要查询不同类型ORG的成功登录历史,并基于历史记录自动登录到不同的ORG环境, 以便于快速切换和管理多个Salesforce环境。
验收标准 (Acceptance Criteria)
功能验收标准
- AC1: 提供按orgType查询成功登录历史的接口
- AC2: 支持查询多种ORG类型(Source、Target、Sandbox、Production等)
- AC3: 返回的登录历史包含完整的登录信息(用户名、登录类型、ORG类型、Session ID、登录时间等)
- AC4: 提供根据登录历史ID自动登录到对应ORG的接口
- AC5: 自动登录时使用历史记录中的登录凭证
- AC6: 自动登录成功后返回完整的登录结果信息
- AC7: 提供查询所有登录成功历史的接口,按username和instanceUrl分组,每组返回最新一条数据
非功能验收标准
- 性能要求: 查询登录历史响应时间 < 500ms
- 安全要求: 登录历史中的敏感信息(如密码)需要加密存储
- 可用性要求: 接口可用性 > 99.9%
- 日志要求: 记录所有登录历史查询和自动登录操作的日志
测试用例
| 用例编号 | 用例描述 | 预期结果 |
|---|---|---|
| TC-001 | 查询Source类型的登录历史 | 返回所有Source类型的成功登录记录 |
| TC-002 | 查询Target类型的登录历史 | 返回所有Target类型的成功登录记录 |
| TC-003 | 查询Sandbox类型的登录历史 | 返回所有Sandbox类型的成功登录记录 |
| TC-004 | 查询不存在的ORG类型 | 返回空列表或提示无记录 |
| TC-005 | 根据历史ID自动登录到Source ORG | 使用历史记录中的凭证成功登录到Source ORG |
| TC-006 | 根据历史ID自动登录到Target ORG | 使用历史记录中的凭证成功登录到Target ORG |
| TC-007 | 根据不存在的历史ID自动登录 | 返回错误信息,提示历史记录不存在 |
| TC-008 | 查询登录历史时orgType为空 | 返回所有类型的登录历史记录 |
| TC-009 | 查询所有登录成功历史分组数据 | 返回按username和instanceUrl分组的最新登录记录 |
技术要求 (Technical Requirements)
技术栈
- Java 17/21
- Spring Boot 3.x
- MyBatis Plus
- Salesforce API
接口要求
- REST API
- SOAP API
- GraphQL API
数据库要求
- MySQL
- PostgreSQL
- Oracle
接口设计
接口1: 查询不同类型ORG成功登录历史
接口路径: GET /salesforce/login/history/success/{orgType}
请求参数:
| 参数名 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
| orgType | String | 是 | ORG类型(Source/Target/Sandbox/Production等) | Source |
响应数据:
{
"code": 200,
"message": "查询成功",
"data": [
{
"id": 1,
"username": "admin@example.com",
"loginType": "password",
"orgType": "Source",
"sessionId": "xxxxx",
"loginTime": "2026-01-16 10:00:00",
"userId": "005xxxxxxxxxxxx",
"organizationId": "00Dxxxxxxxxxxxx"
}
]
}
接口2: 根据登录历史自动登录
接口路径: POST /salesforce/login/autoLoginByHistory
请求参数:
| 参数名 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
| historyId | Long | 是 | 登录历史记录ID | 1 |
响应数据:
{
"code": 200,
"message": "自动登录成功",
"data": {
"userId": "005xxxxxxxxxxxx",
"organizationId": "00Dxxxxxxxxxxxx",
"sessionId": "xxxxx",
"instanceUrl": "https://xxx.my.salesforce.com",
"orgType": "Source",
"loginType": "password"
}
}
接口3: 查询所有登录成功历史分组数据
接口路径: GET /auth/history/latest-success-grouped
功能描述: 查询所有登录成功的历史记录,按username和instanceUrl分组,每组返回最新一条数据
请求参数: 无
响应数据:
{
"code": 200,
"message": "查询成功",
"rows": [
{
"id": 1,
"username": "admin@example.com",
"loginType": "password",
"instanceUrl": "https://xxx.my.salesforce.com",
"orgType": "Source",
"sessionId": "xxxxx",
"loginTime": "2026-01-16 10:00:00",
"userId": "005xxxxxxxxxxxx",
"organizationId": "00Dxxxxxxxxxxxx"
}
],
"total": 1
}
依赖关系 (Dependencies)
前置需求
- REQ-001 - Salesforce数据及时同步至本地数据库
后续需求
- 无
外部依赖
- [Salesforce API] - Salesforce登录API
相关文档 (Related Documents)
- 设计文档
- ADR 文档
- 提示词文档
- DataISfLoginController - Salesforce登录控制器接口文档
变更历史 (Change History)
| 日期 | 版本 | 变更内容 | 变更人 |
|---|---|---|---|
| 2026-01-16 | 1.0.0 | 初始版本 | SSOT Architect |