12 KiB
12 KiB
Salesforce 会话管理需求
元数据
- 需求编号:2026-01-21-003-05
- 父需求编号:2026-01-21-003
- 创建时间:2026-01-21
- 创建人:SSOT 架构师
- 状态:待开始
- 优先级:高
需求概述
支持会话管理,会话失效时自动重新登录。获取当前 Salesforce 会话信息(按 org 类型),会话失效时自动重新登录,获取当前 Session ID,获取当前 Instance URL,判断会话是否有效。支持按 org 类型(source/target)管理会话,支持自动登录(基于历史登录记录)。
目标
- 会话管理:支持会话管理,会话失效时自动重新登录
- 会话信息获取:获取当前 Salesforce 会话信息(按 org 类型)
- 会话失效处理:会话失效时自动重新登录
- Session ID 获取:获取当前 Session ID
- Instance URL 获取:获取当前 Instance URL
- 会话有效性判断:判断会话是否有效
- 按 org 类型管理:支持按 org 类型(source/target)管理会话
- 自动登录:支持自动登录(基于历史登录记录)
业务上下文
当前问题
- 缺乏会话管理功能
- 缺乏会话失效时自动重新登录机制
业务场景
Salesforce 会话管理
├─ 获取当前 Salesforce 会话信息
├─ 会话失效时自动重新登录
├─ 获取当前 Session ID
├─ 获取当前 Instance URL
└─ 判断会话是否有效
应用场景
- 会话管理:自动管理会话,会话失效时自动重新登录,提升用户体验
- 自动登录:基于历史登录记录进行自动登录
功能需求
核心功能
功能 1:获取会话信息
- 描述:获取当前 Salesforce 会话信息(按 org 类型)
- 验收标准:
- 支持获取当前 Salesforce 会话信息
- 支持按 org 类型(source/target)获取会话信息
- 支持获取当前 Session ID
- 支持获取当前 Instance URL
- 支持获取用户信息
- 支持获取组织信息
- 支持获取令牌过期时间
- 优先级:高
- 依赖关系:依赖缓存优化功能(2026-01-21-003-04)
功能 2:会话有效性判断
- 描述:判断会话是否有效
- 验收标准:
- 判断会话信息是否为 null
- 判断登录状态是否为成功
- 判断 Session ID 是否为空
- 判断 Session 是否过期
- 返回会话有效性状态(有效/无效)
- 优先级:高
- 依赖关系:依赖获取会话信息功能
功能 3:会话失效处理
- 描述:会话失效时自动重新登录
- 验收标准:
- 会话失效时自动重新登录
- 基于历史登录记录进行自动登录
- 自动登录失败时返回错误信息
- 自动登录成功后更新缓存
- 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
- 优先级:高
- 依赖关系:依赖会话有效性判断功能、登录历史功能(2026-01-21-003-03)
功能 4:按 org 类型管理会话
- 描述:支持按 org 类型(source/target)管理会话
- 验收标准:
- 支持按 org 类型(source)管理会话
- 支持按 org 类型(target)管理会话
- 支持同时管理源 org 和目标 org 的会话
- 支持查询指定 org 类型的会话信息
- 优先级:高
- 依赖关系:依赖获取会话信息功能
功能 5:自动登录
- 描述:支持自动登录(基于历史登录记录)
- 验收标准:
- 基于历史登录记录进行自动登录
- 选择最近一次成功的登录记录
- 验证历史登录信息的有效性
- 使用历史登录信息进行登录
- 自动登录成功后更新缓存
- 自动登录失败时返回错误信息
- 自动登录失败时抛出异常
- 记录自动登录的日志
- 优先级:高
- 依赖关系:依赖会话失效处理功能、登录历史功能(2026-01-21-003-03)
功能 6:会话信息管理
- 描述:支持会话信息的增删改查
- 验收标准:
- 支持查询会话信息列表
- 支持查询会话信息详情
- 支持新增会话信息
- 支持修改会话信息
- 支持删除会话信息
- 支持批量删除会话信息
- 支持根据 Session ID 查询会话信息
- 支持查询最近一条活跃的会话信息
- 支持根据 ORG 类型查询最近一条活跃的会话信息
- 支持导出会话信息列表为 Excel 文件
- 优先级:高
- 依赖关系:依赖获取会话信息功能
非功能需求
性能需求
- 会话查询时间:会话查询响应时间 < 10ms
- 会话校验时间:会话有效性校验时间 < 5ms
- 并发用户数:支持 100+ 并发用户
安全需求
- 会话安全:会话信息使用加密存储
- 会话过期:会话过期后自动失效
可用性需求
- 系统可用性: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)自动过期
数据流转需求
会话管理
└─ 获取当前 Salesforce 会话信息(按 org 类型)
└─ 判断会话是否有效
└─ 会话失效时自动重新登录
└─ 基于历史登录记录进行自动登录
└─ 获取当前 Session ID
└─ 获取当前 Instance URL
└─ 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
会话信息管理
└─ 查询会话信息列表
└─ 查询会话信息详情
└─ 新增会话信息
└─ 修改会话信息
└─ 删除会话信息
└─ 批量删除会话信息
└─ 根据 Session ID 查询会话信息
└─ 查询最近一条活跃的会话信息
└─ 根据 ORG 类型查询最近一条活跃的会话信息
└─ 导出会话信息列表为 Excel 文件
业务规则
- 会话管理:支持会话管理,会话失效时自动重新登录
- 会话有效性判断:判断会话是否有效(会话信息不为 null、登录状态为成功、Session ID 不为空、Session 未过期)
- 会话失效处理:会话失效时自动重新登录
- 按 org 类型管理:支持按 org 类型(source/target)管理会话
- 自动登录:支持自动登录(基于历史登录记录)
- 会话状态日志:记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
- 自动登录失败处理:自动登录失败时返回错误信息并抛出异常
- 会话信息管理:支持会话信息的增删改查
- 会话状态管理:支持会话状态(active/inactive)和最后活动时间管理
接口需求
会话管理接口
-
获取会话信息
- 接口路径:GET /api/salesforce/session/info
- 请求参数:orgType(必填,source/target)
- 响应:会话信息(SalesforceLoginResult)
-
获取当前 Session ID
- 接口路径:GET /api/salesforce/session/session-id
- 请求参数:orgType(必填,source/target)
- 响应:Session ID
-
获取当前 Instance URL
- 接口路径:GET /api/salesforce/session/instance-url
- 请求参数:orgType(必填,source/target)
- 响应:Instance URL
-
判断会话是否有效
- 接口路径:GET /api/salesforce/session/valid
- 请求参数:orgType(必填,source/target)
- 响应:会话有效性状态(true/false)
-
自动登录
- 接口路径:POST /api/salesforce/session/auto-login
- 请求参数:orgType(必填,source/target)
- 响应:登录结果(SalesforceLoginResult)
-
查询会话信息列表
- 接口路径:GET /api/salesforce/session/list
- 请求参数:分页参数、筛选参数
- 响应:会话信息列表
-
导出会话信息列表
- 接口路径:POST /api/salesforce/session/export
- 请求参数:筛选参数
- 响应:Excel 文件
-
查询会话信息详情
- 接口路径:GET /api/salesforce/session/{id}
- 响应:会话信息详情
-
新增会话信息
- 接口路径:POST /api/salesforce/session
- 请求参数:会话信息
- 响应:成功/失败
-
修改会话信息
- 接口路径:PUT /api/salesforce/session
- 请求参数:会话信息
- 响应:成功/失败
-
删除会话信息
- 接口路径:DELETE /api/salesforce/session/{ids}
- 请求参数:会话 ID 数组
- 响应:成功/失败
-
根据 Session ID 查询会话信息
- 接口路径:GET /api/salesforce/session/by-session-id/{sessionId}
- 响应:会话信息
-
查询最近一条活跃的会话信息
- 接口路径:GET /api/salesforce/session/latest-active
- 响应:会话信息
-
根据 ORG 类型查询最近一条活跃的会话信息
- 接口路径:GET /api/salesforce/session/latest-active/{orgType}
- 请求参数:orgType(S/T/ST)
- 响应:会话信息
依赖关系
- 依赖
2026-01-21-003-03:登录历史 - 依赖
2026-01-21-003-04:缓存优化 - 依赖
datai-cache-redis模块 - 依赖
datai-salesforce-common模块的 Salesforce API 封装
后续需求
- 2026-01-21-003-06:登录状态查询
- 2026-01-21-003-07:错误码映射