11 KiB
11 KiB
Salesforce 登录状态查询需求
元数据
- 需求编号:2026-01-21-003-06
- 父需求编号:2026-01-21-003
- 创建时间:2026-01-21
- 创建人:SSOT 架构师
- 状态:待开始
- 优先级:高
需求概述
提供登录状态查询接口,用户可以查看当前所有系统的登录状态。提供查询接口返回当前所有系统的登录状态,显示每个系统的登录状态(已登录/未登录/已过期),显示每个系统的 Session ID(脱敏处理),显示每个系统的过期时间,支持按 org 类型筛选查询结果,支持按系统 ID 查询特定系统的登录状态。
目标
- 登录状态查询:提供登录状态查询接口,用户可以查看当前所有系统的登录状态
- 系统登录状态:显示每个系统的登录状态(已登录/未登录/已过期)
- Session ID 显示:显示每个系统的 Session ID(脱敏处理)
- 过期时间显示:显示每个系统的过期时间
- 按 org 类型筛选:支持按 org 类型筛选查询结果
- 按系统 ID 查询:支持按系统 ID 查询特定系统的登录状态
业务上下文
当前问题
- 缺乏登录状态查询功能
- 用户无法查看当前所有系统的登录状态
业务场景
Salesforce 登录状态查询
├─ 提供查询接口返回当前所有系统的登录状态
├─ 显示每个系统的登录状态(已登录/未登录/已过期)
├─ 显示每个系统的 Session ID(脱敏处理)
├─ 显示每个系统的过期时间
├─ 支持按 org 类型筛选查询结果
└─ 支持按系统 ID 查询特定系统的登录状态
应用场景
- 登录状态监控:用户可以查看当前所有系统的登录状态
- Session 管理:用户可以查看和管理 Session ID
功能需求
核心功能
功能 1:查询所有系统登录状态
- 描述:提供查询接口返回当前所有系统的登录状态
- 验收标准:
- 提供查询接口返回当前所有系统的登录状态
- 显示每个系统的系统 ID
- 显示每个系统的系统名称
- 显示每个系统的系统类型
- 显示每个系统的 org 类型
- 显示每个系统的登录状态(已登录/未登录/已过期)
- 显示每个系统的 Session ID(脱敏处理)
- 显示每个系统的过期时间
- 显示每个系统的用户信息
- 显示每个系统的组织信息
- 优先级:高
- 依赖关系:依赖缓存优化功能(2026-01-21-003-04)、会话管理功能(2026-01-21-003-05)
功能 2:按 org 类型筛选查询
- 描述:支持按 org 类型筛选查询结果
- 验收标准:
- 支持按 org 类型(source)筛选查询结果
- 支持按 org 类型(target)筛选查询结果
- 支持查询所有 org 类型的系统
- 支持同时查询源 org 和目标 org 的系统
- 优先级:高
- 依赖关系:依赖查询所有系统登录状态功能
功能 3:按系统 ID 查询
- 描述:支持按系统 ID 查询特定系统的登录状态
- 验收标准:
- 支持按系统 ID 查询特定系统的登录状态
- 返回指定系统的详细登录状态
- 系统不存在时返回错误信息
- 优先级:高
- 依赖关系:依赖查询所有系统登录状态功能
功能 4:Session ID 脱敏处理
- 描述:显示每个系统的 Session ID(脱敏处理)
- 验收标准:
- Session ID 进行脱敏处理
- 只显示 Session ID 的前 4 位和后 4 位
- 中间部分用 **** 代替
- 格式:
{前4位}****{后4位}
- 优先级:高
- 依赖关系:依赖查询所有系统登录状态功能
功能 5:会话信息管理
- 描述:支持会话信息的增删改查
- 验收标准:
- 支持查询会话信息列表
- 支持查询会话信息详情
- 支持新增会话信息
- 支持修改会话信息
- 支持删除会话信息
- 支持批量删除会话信息
- 支持根据 Session ID 查询会话信息
- 支持查询最近一条活跃的会话信息
- 支持根据 ORG 类型查询最近一条活跃的会话信息
- 支持导出会话信息列表为 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 文件
业务规则
- 登录状态判断:根据缓存信息判断登录状态(已登录/未登录/已过期)
- Session ID 脱敏:Session ID 必须进行脱敏处理,只显示前 4 位和后 4 位
- 按 org 类型筛选:支持按 org 类型(source/target)筛选查询结果
- 按系统 ID 查询:支持按系统 ID 查询特定系统的登录状态
- 会话信息管理:支持会话信息的增删改查
- 会话状态管理:支持会话状态(active/inactive)和最后活动时间管理
接口需求
登录状态查询接口
-
查询所有系统登录状态
- 接口路径:GET /api/salesforce/login/status/list
- 请求参数:无(从缓存中读取所有 org 类型的登录状态)
- 响应:所有系统的登录状态列表(源 org 和目标 org)
-
查询特定 org 类型登录状态
- 接口路径:GET /api/salesforce/login/status/{orgType}
- 请求参数:orgType(必填,source/target)
- 响应:指定 org 类型的登录状态
-
查询源 org 登录状态
- 接口路径:GET /api/salesforce/login/status/source
- 请求参数:无
- 响应:源 org 的登录状态
-
查询目标 org 登录状态
- 接口路径:GET /api/salesforce/login/status/target
- 请求参数:无
- 响应:目标 org 的登录状态
会话信息管理接口
-
查询会话信息列表
- 接口路径:GET /auth/session/list
- 请求参数:分页参数、筛选参数
- 响应:会话信息列表
-
导出会话信息列表
- 接口路径:POST /auth/session/export
- 请求参数:筛选参数
- 响应:Excel 文件
-
查询会话信息详情
- 接口路径:GET /auth/session/{id}
- 响应:会话信息详情
-
新增会话信息
- 接口路径:POST /auth/session
- 请求参数:会话信息
- 响应:成功/失败
-
修改会话信息
- 接口路径:PUT /auth/session
- 请求参数:会话信息
- 响应:成功/失败
-
删除会话信息
- 接口路径:DELETE /auth/session/{ids}
- 请求参数:会话 ID 数组
- 响应:成功/失败
-
根据 Session ID 查询会话信息
- 接口路径:GET /auth/session/by-session-id/{sessionId}
- 响应:会话信息
-
查询最近一条活跃的会话信息
- 接口路径:GET /auth/session/latest-active
- 响应:会话信息
-
根据 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:错误码映射