300 lines
11 KiB
Markdown
300 lines
11 KiB
Markdown
# Salesforce 登录状态查询需求
|
||
|
||
## 元数据
|
||
- 需求编号:2026-01-21-003-06
|
||
- 父需求编号:2026-01-21-003
|
||
- 创建时间:2026-01-21
|
||
- 创建人:SSOT 架构师
|
||
- 状态:待开始
|
||
- 优先级:高
|
||
|
||
## 需求概述
|
||
提供登录状态查询接口,用户可以查看当前所有系统的登录状态。提供查询接口返回当前所有系统的登录状态,显示每个系统的登录状态(已登录/未登录/已过期),显示每个系统的 Session ID(脱敏处理),显示每个系统的过期时间,支持按 org 类型筛选查询结果,支持按系统 ID 查询特定系统的登录状态。
|
||
|
||
## 目标
|
||
1. **登录状态查询**:提供登录状态查询接口,用户可以查看当前所有系统的登录状态
|
||
2. **系统登录状态**:显示每个系统的登录状态(已登录/未登录/已过期)
|
||
3. **Session ID 显示**:显示每个系统的 Session ID(脱敏处理)
|
||
4. **过期时间显示**:显示每个系统的过期时间
|
||
5. **按 org 类型筛选**:支持按 org 类型筛选查询结果
|
||
6. **按系统 ID 查询**:支持按系统 ID 查询特定系统的登录状态
|
||
|
||
## 业务上下文
|
||
|
||
### 当前问题
|
||
- 缺乏登录状态查询功能
|
||
- 用户无法查看当前所有系统的登录状态
|
||
|
||
### 业务场景
|
||
```
|
||
Salesforce 登录状态查询
|
||
├─ 提供查询接口返回当前所有系统的登录状态
|
||
├─ 显示每个系统的登录状态(已登录/未登录/已过期)
|
||
├─ 显示每个系统的 Session ID(脱敏处理)
|
||
├─ 显示每个系统的过期时间
|
||
├─ 支持按 org 类型筛选查询结果
|
||
└─ 支持按系统 ID 查询特定系统的登录状态
|
||
```
|
||
|
||
### 应用场景
|
||
1. **登录状态监控**:用户可以查看当前所有系统的登录状态
|
||
2. **Session 管理**:用户可以查看和管理 Session ID
|
||
|
||
## 功能需求
|
||
|
||
### 核心功能
|
||
|
||
#### 功能 1:查询所有系统登录状态
|
||
- **描述**:提供查询接口返回当前所有系统的登录状态
|
||
- **验收标准**:
|
||
1. 提供查询接口返回当前所有系统的登录状态
|
||
2. 显示每个系统的系统 ID
|
||
3. 显示每个系统的系统名称
|
||
4. 显示每个系统的系统类型
|
||
5. 显示每个系统的 org 类型
|
||
6. 显示每个系统的登录状态(已登录/未登录/已过期)
|
||
7. 显示每个系统的 Session ID(脱敏处理)
|
||
8. 显示每个系统的过期时间
|
||
9. 显示每个系统的用户信息
|
||
10. 显示每个系统的组织信息
|
||
- **优先级**:高
|
||
- **依赖关系**:依赖缓存优化功能(2026-01-21-003-04)、会话管理功能(2026-01-21-003-05)
|
||
|
||
#### 功能 2:按 org 类型筛选查询
|
||
- **描述**:支持按 org 类型筛选查询结果
|
||
- **验收标准**:
|
||
1. 支持按 org 类型(source)筛选查询结果
|
||
2. 支持按 org 类型(target)筛选查询结果
|
||
3. 支持查询所有 org 类型的系统
|
||
4. 支持同时查询源 org 和目标 org 的系统
|
||
- **优先级**:高
|
||
- **依赖关系**:依赖查询所有系统登录状态功能
|
||
|
||
#### 功能 3:按系统 ID 查询
|
||
- **描述**:支持按系统 ID 查询特定系统的登录状态
|
||
- **验收标准**:
|
||
1. 支持按系统 ID 查询特定系统的登录状态
|
||
2. 返回指定系统的详细登录状态
|
||
3. 系统不存在时返回错误信息
|
||
- **优先级**:高
|
||
- **依赖关系**:依赖查询所有系统登录状态功能
|
||
|
||
#### 功能 4:Session ID 脱敏处理
|
||
- **描述**:显示每个系统的 Session ID(脱敏处理)
|
||
- **验收标准**:
|
||
1. Session ID 进行脱敏处理
|
||
2. 只显示 Session ID 的前 4 位和后 4 位
|
||
3. 中间部分用 **** 代替
|
||
4. 格式:`{前4位}****{后4位}`
|
||
- **优先级**:高
|
||
- **依赖关系**:依赖查询所有系统登录状态功能
|
||
|
||
#### 功能 5:会话信息管理
|
||
- **描述**:支持会话信息的增删改查
|
||
- **验收标准**:
|
||
1. 支持查询会话信息列表
|
||
2. 支持查询会话信息详情
|
||
3. 支持新增会话信息
|
||
4. 支持修改会话信息
|
||
5. 支持删除会话信息
|
||
6. 支持批量删除会话信息
|
||
7. 支持根据 Session ID 查询会话信息
|
||
8. 支持查询最近一条活跃的会话信息
|
||
9. 支持根据 ORG 类型查询最近一条活跃的会话信息
|
||
10. 支持导出会话信息列表为 Excel 文件
|
||
- **优先级**:高
|
||
- **依赖关系**:依赖查询所有系统登录状态功能
|
||
|
||
## 非功能需求
|
||
|
||
### 性能需求
|
||
- **查询时间**:登录状态查询响应时间 < 1 秒
|
||
- **并发用户数**:支持 100+ 并发用户
|
||
|
||
### 安全需求
|
||
- **数据安全**:Session ID 进行脱敏处理
|
||
- **访问控制**:只有授权用户才能查询登录状态
|
||
|
||
### 可用性需求
|
||
- **系统可用性**:99.9%
|
||
|
||
### 可维护性需求
|
||
- **代码可读性**:代码符合项目编码规范,注释完整
|
||
- **测试覆盖率**:单元测试覆盖率 ≥ 80%
|
||
|
||
## 数据需求
|
||
|
||
### 数据模型
|
||
|
||
#### datai_sf_login_session(Salesforce 登录会话表)
|
||
```
|
||
datai_sf_login_session (Salesforce 登录会话表)
|
||
├─ id (BIGINT) - 主键ID
|
||
├─ username (VARCHAR) - 用户名
|
||
├─ login_type (VARCHAR) - 登录类型(oauth2/session_id/cli/legacy_credential)
|
||
├─ status (VARCHAR) - 会话状态(active/inactive)
|
||
├─ login_time (DATETIME) - 登录时间
|
||
├─ expire_time (DATETIME) - 过期时间
|
||
├─ last_activity_time (DATETIME) - 最后活动时间
|
||
├─ login_ip (VARCHAR) - 登录 IP
|
||
├─ device_info (VARCHAR) - 设备信息
|
||
├─ browser_info (VARCHAR) - 浏览器信息
|
||
├─ session_id (VARCHAR) - 会话 ID
|
||
├─ dept_id (BIGINT) - 部门 ID
|
||
├─ sf_user_id (VARCHAR) - Salesforce 用户 ID
|
||
├─ sf_organization_id (VARCHAR) - Salesforce 组织 ID
|
||
├─ instance_url (VARCHAR) - 实例 URL(Instance URL)
|
||
├─ org_type (VARCHAR) - ORG 类型(S=源 org T=目标 org ST=源和目标 org)
|
||
├─ create_by (VARCHAR) - 创建者
|
||
├─ create_time (DATETIME) - 创建时间
|
||
├─ update_by (VARCHAR) - 更新者
|
||
└─ update_time (DATETIME) - 更新时间
|
||
```
|
||
|
||
#### Redis 缓存结构(复用缓存优化需求的缓存结构)
|
||
```
|
||
缓存键:
|
||
- 源 org:CURRENT_SOURCE_ORG_RESULT
|
||
- 目标 org:CURRENT_TARGET_ORG_RESULT
|
||
|
||
说明:
|
||
- 缓存键通过 orgType(source/target)动态获取
|
||
- 源 org 和目标 org 使用不同的缓存键
|
||
- 支持同时管理源 org 和目标 org 的会话
|
||
|
||
缓存值(SalesforceLoginResult 对象,JSON 序列化):
|
||
{
|
||
"success": true/false,
|
||
"errorCode": "错误代码",
|
||
"errorMessage": "错误信息",
|
||
"sessionId": "Session ID",
|
||
"refreshToken": "刷新令牌(仅 OAuth 流程中存在)",
|
||
"tokenType": "Bearer",
|
||
"expiresIn": "过期时间(秒)",
|
||
"loginTimestamp": "登录时间戳",
|
||
"expirationTimestamp": "过期时间戳(登录时间 + 过期时长)",
|
||
"instanceUrl": "实例 URL(Instance URL)",
|
||
"metadataServerUrl": "元数据服务器 URL",
|
||
"sandbox": true/false,
|
||
"passwordExpired": true/false,
|
||
"userId": "用户 ID(由 Salesforce 登录后返回)",
|
||
"organizationId": "组织 ID(由 Salesforce 登录后返回)",
|
||
"orgType": "组织类型(source/target)",
|
||
"userFullName": "用户全名",
|
||
"userEmail": "用户邮箱",
|
||
"organizationName": "组织名称(由 Salesforce 登录后返回)",
|
||
"language": "语言",
|
||
"timeZone": "时区"
|
||
}
|
||
|
||
缓存过期时间:2 小时(7200 秒)
|
||
```
|
||
|
||
### 数据存储需求
|
||
- **缓存类型**:Redis
|
||
- **存储容量**:支持 1000 万+ 缓存键
|
||
- **缓存过期策略**:TTL(Time To Live)自动过期
|
||
|
||
### 数据流转需求
|
||
```
|
||
登录状态查询
|
||
└─ 从 Redis 读取所有系统的登录状态
|
||
└─ 判断每个系统的登录状态(已登录/未登录/已过期)
|
||
└─ 对 Session ID 进行脱敏处理
|
||
└─ 返回登录状态信息
|
||
|
||
会话信息管理
|
||
└─ 查询会话信息列表
|
||
└─ 查询会话信息详情
|
||
└─ 新增会话信息
|
||
└─ 修改会话信息
|
||
└─ 删除会话信息
|
||
└─ 批量删除会话信息
|
||
└─ 根据 Session ID 查询会话信息
|
||
└─ 查询最近一条活跃的会话信息
|
||
└─ 根据 ORG 类型查询最近一条活跃的会话信息
|
||
└─ 导出会话信息列表为 Excel 文件
|
||
```
|
||
|
||
## 业务规则
|
||
1. **登录状态判断**:根据缓存信息判断登录状态(已登录/未登录/已过期)
|
||
2. **Session ID 脱敏**:Session ID 必须进行脱敏处理,只显示前 4 位和后 4 位
|
||
3. **按 org 类型筛选**:支持按 org 类型(source/target)筛选查询结果
|
||
4. **按系统 ID 查询**:支持按系统 ID 查询特定系统的登录状态
|
||
5. **会话信息管理**:支持会话信息的增删改查
|
||
6. **会话状态管理**:支持会话状态(active/inactive)和最后活动时间管理
|
||
|
||
## 接口需求
|
||
|
||
### 登录状态查询接口
|
||
1. **查询所有系统登录状态**
|
||
- 接口路径:GET /api/salesforce/login/status/list
|
||
- 请求参数:无(从缓存中读取所有 org 类型的登录状态)
|
||
- 响应:所有系统的登录状态列表(源 org 和目标 org)
|
||
|
||
2. **查询特定 org 类型登录状态**
|
||
- 接口路径:GET /api/salesforce/login/status/{orgType}
|
||
- 请求参数:orgType(必填,source/target)
|
||
- 响应:指定 org 类型的登录状态
|
||
|
||
3. **查询源 org 登录状态**
|
||
- 接口路径:GET /api/salesforce/login/status/source
|
||
- 请求参数:无
|
||
- 响应:源 org 的登录状态
|
||
|
||
4. **查询目标 org 登录状态**
|
||
- 接口路径:GET /api/salesforce/login/status/target
|
||
- 请求参数:无
|
||
- 响应:目标 org 的登录状态
|
||
|
||
### 会话信息管理接口
|
||
5. **查询会话信息列表**
|
||
- 接口路径:GET /auth/session/list
|
||
- 请求参数:分页参数、筛选参数
|
||
- 响应:会话信息列表
|
||
|
||
6. **导出会话信息列表**
|
||
- 接口路径:POST /auth/session/export
|
||
- 请求参数:筛选参数
|
||
- 响应:Excel 文件
|
||
|
||
7. **查询会话信息详情**
|
||
- 接口路径:GET /auth/session/{id}
|
||
- 响应:会话信息详情
|
||
|
||
8. **新增会话信息**
|
||
- 接口路径:POST /auth/session
|
||
- 请求参数:会话信息
|
||
- 响应:成功/失败
|
||
|
||
9. **修改会话信息**
|
||
- 接口路径:PUT /auth/session
|
||
- 请求参数:会话信息
|
||
- 响应:成功/失败
|
||
|
||
10. **删除会话信息**
|
||
- 接口路径:DELETE /auth/session/{ids}
|
||
- 请求参数:会话 ID 数组
|
||
- 响应:成功/失败
|
||
|
||
11. **根据 Session ID 查询会话信息**
|
||
- 接口路径:GET /auth/session/by-session-id/{sessionId}
|
||
- 响应:会话信息
|
||
|
||
12. **查询最近一条活跃的会话信息**
|
||
- 接口路径:GET /auth/session/latest-active
|
||
- 响应:会话信息
|
||
|
||
13. **根据 ORG 类型查询最近一条活跃的会话信息**
|
||
- 接口路径:GET /auth/session/latest-active/{orgType}
|
||
- 请求参数:orgType(S/T/ST)
|
||
- 响应:会话信息
|
||
|
||
## 依赖关系
|
||
- 依赖 `2026-01-21-003-04`:缓存优化
|
||
- 依赖 `2026-01-21-003-05`:会话管理
|
||
- 依赖 `datai-cache-redis` 模块
|
||
|
||
## 后续需求
|
||
- 2026-01-21-003-07:错误码映射
|