datai/docs/requirements/2026-01-21-003-05-salesforce-session-management.md

12 KiB
Raw Blame History

Salesforce 会话管理需求

元数据

  • 需求编号2026-01-21-003-05
  • 父需求编号2026-01-21-003
  • 创建时间2026-01-21
  • 创建人SSOT 架构师
  • 状态:待开始
  • 优先级:高

需求概述

支持会话管理,会话失效时自动重新登录。获取当前 Salesforce 会话信息(按 org 类型),会话失效时自动重新登录,获取当前 Session ID获取当前 Instance URL判断会话是否有效。支持按 org 类型source/target管理会话支持自动登录基于历史登录记录

目标

  1. 会话管理:支持会话管理,会话失效时自动重新登录
  2. 会话信息获取:获取当前 Salesforce 会话信息(按 org 类型)
  3. 会话失效处理:会话失效时自动重新登录
  4. Session ID 获取:获取当前 Session ID
  5. Instance URL 获取:获取当前 Instance URL
  6. 会话有效性判断:判断会话是否有效
  7. 按 org 类型管理:支持按 org 类型source/target管理会话
  8. 自动登录:支持自动登录(基于历史登录记录)

业务上下文

当前问题

  • 缺乏会话管理功能
  • 缺乏会话失效时自动重新登录机制

业务场景

Salesforce 会话管理
├─ 获取当前 Salesforce 会话信息
├─ 会话失效时自动重新登录
├─ 获取当前 Session ID
├─ 获取当前 Instance URL
└─ 判断会话是否有效

应用场景

  1. 会话管理:自动管理会话,会话失效时自动重新登录,提升用户体验
  2. 自动登录:基于历史登录记录进行自动登录

功能需求

核心功能

功能 1获取会话信息

  • 描述:获取当前 Salesforce 会话信息(按 org 类型)
  • 验收标准
    1. 支持获取当前 Salesforce 会话信息
    2. 支持按 org 类型source/target获取会话信息
    3. 支持获取当前 Session ID
    4. 支持获取当前 Instance URL
    5. 支持获取用户信息
    6. 支持获取组织信息
    7. 支持获取令牌过期时间
  • 优先级:高
  • 依赖关系依赖缓存优化功能2026-01-21-003-04

功能 2会话有效性判断

  • 描述:判断会话是否有效
  • 验收标准
    1. 判断会话信息是否为 null
    2. 判断登录状态是否为成功
    3. 判断 Session ID 是否为空
    4. 判断 Session 是否过期
    5. 返回会话有效性状态(有效/无效)
  • 优先级:高
  • 依赖关系:依赖获取会话信息功能

功能 3会话失效处理

  • 描述:会话失效时自动重新登录
  • 验收标准
    1. 会话失效时自动重新登录
    2. 基于历史登录记录进行自动登录
    3. 自动登录失败时返回错误信息
    4. 自动登录成功后更新缓存
    5. 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
  • 优先级:高
  • 依赖关系依赖会话有效性判断功能、登录历史功能2026-01-21-003-03

功能 4按 org 类型管理会话

  • 描述:支持按 org 类型source/target管理会话
  • 验收标准
    1. 支持按 org 类型source管理会话
    2. 支持按 org 类型target管理会话
    3. 支持同时管理源 org 和目标 org 的会话
    4. 支持查询指定 org 类型的会话信息
  • 优先级:高
  • 依赖关系:依赖获取会话信息功能

功能 5自动登录

  • 描述:支持自动登录(基于历史登录记录)
  • 验收标准
    1. 基于历史登录记录进行自动登录
    2. 选择最近一次成功的登录记录
    3. 验证历史登录信息的有效性
    4. 使用历史登录信息进行登录
    5. 自动登录成功后更新缓存
    6. 自动登录失败时返回错误信息
    7. 自动登录失败时抛出异常
    8. 记录自动登录的日志
  • 优先级:高
  • 依赖关系依赖会话失效处理功能、登录历史功能2026-01-21-003-03

功能 6会话信息管理

  • 描述:支持会话信息的增删改查
  • 验收标准
    1. 支持查询会话信息列表
    2. 支持查询会话信息详情
    3. 支持新增会话信息
    4. 支持修改会话信息
    5. 支持删除会话信息
    6. 支持批量删除会话信息
    7. 支持根据 Session ID 查询会话信息
    8. 支持查询最近一条活跃的会话信息
    9. 支持根据 ORG 类型查询最近一条活跃的会话信息
    10. 支持导出会话信息列表为 Excel 文件
  • 优先级:高
  • 依赖关系:依赖获取会话信息功能

非功能需求

性能需求

  • 会话查询时间:会话查询响应时间 < 10ms
  • 会话校验时间:会话有效性校验时间 < 5ms
  • 并发用户数:支持 100+ 并发用户

安全需求

  • 会话安全:会话信息使用加密存储
  • 会话过期:会话过期后自动失效

可用性需求

  • 系统可用性99.9%
  • 容错机制:会话失效时自动重新登录

可维护性需求

  • 代码可读性:代码符合项目编码规范,注释完整
  • 测试覆盖率:单元测试覆盖率 ≥ 80%

数据需求

数据模型

datai_sf_login_sessionSalesforce 登录会话表)

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) - 实例 URLInstance URL
├─ org_type (VARCHAR) - ORG 类型S=源 org T=目标 org ST=源和目标 org
├─ create_by (VARCHAR) - 创建者
├─ create_time (DATETIME) - 创建时间
├─ update_by (VARCHAR) - 更新者
└─ update_time (DATETIME) - 更新时间

Redis 缓存结构(复用缓存优化需求的缓存结构)

缓存键:
- 源 orgCURRENT_SOURCE_ORG_RESULT
- 目标 orgCURRENT_TARGET_ORG_RESULT

说明:
- 缓存键通过 orgTypesource/target动态获取
- 源 org 和目标 org 使用不同的缓存键
- 支持同时管理源 org 和目标 org 的会话

缓存值SalesforceLoginResult 对象JSON 序列化):
{
  "success": true/false,
  "errorCode": "错误代码",
  "errorMessage": "错误信息",
  "sessionId": "Session ID",
  "refreshToken": "刷新令牌(仅 OAuth 流程中存在)",
  "tokenType": "Bearer",
  "expiresIn": "过期时间(秒)",
  "loginTimestamp": "登录时间戳",
  "expirationTimestamp": "过期时间戳(登录时间 + 过期时长)",
  "instanceUrl": "实例 URLInstance 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 万+ 缓存键
  • 缓存过期策略TTLTime To Live自动过期

数据流转需求

会话管理
  └─ 获取当前 Salesforce 会话信息(按 org 类型)
  └─ 判断会话是否有效
  └─ 会话失效时自动重新登录
  └─ 基于历史登录记录进行自动登录
  └─ 获取当前 Session ID
  └─ 获取当前 Instance URL
  └─ 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)

会话信息管理
  └─ 查询会话信息列表
  └─ 查询会话信息详情
  └─ 新增会话信息
  └─ 修改会话信息
  └─ 删除会话信息
  └─ 批量删除会话信息
  └─ 根据 Session ID 查询会话信息
  └─ 查询最近一条活跃的会话信息
  └─ 根据 ORG 类型查询最近一条活跃的会话信息
  └─ 导出会话信息列表为 Excel 文件

业务规则

  1. 会话管理:支持会话管理,会话失效时自动重新登录
  2. 会话有效性判断:判断会话是否有效(会话信息不为 null、登录状态为成功、Session ID 不为空、Session 未过期)
  3. 会话失效处理:会话失效时自动重新登录
  4. 按 org 类型管理:支持按 org 类型source/target管理会话
  5. 自动登录:支持自动登录(基于历史登录记录)
  6. 会话状态日志:记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
  7. 自动登录失败处理:自动登录失败时返回错误信息并抛出异常
  8. 会话信息管理:支持会话信息的增删改查
  9. 会话状态管理支持会话状态active/inactive和最后活动时间管理

接口需求

会话管理接口

  1. 获取会话信息

    • 接口路径GET /api/salesforce/session/info
    • 请求参数orgType必填source/target
    • 响应会话信息SalesforceLoginResult
  2. 获取当前 Session ID

    • 接口路径GET /api/salesforce/session/session-id
    • 请求参数orgType必填source/target
    • 响应Session ID
  3. 获取当前 Instance URL

    • 接口路径GET /api/salesforce/session/instance-url
    • 请求参数orgType必填source/target
    • 响应Instance URL
  4. 判断会话是否有效

    • 接口路径GET /api/salesforce/session/valid
    • 请求参数orgType必填source/target
    • 响应会话有效性状态true/false
  5. 自动登录

    • 接口路径POST /api/salesforce/session/auto-login
    • 请求参数orgType必填source/target
    • 响应登录结果SalesforceLoginResult
  6. 查询会话信息列表

    • 接口路径GET /api/salesforce/session/list
    • 请求参数:分页参数、筛选参数
    • 响应:会话信息列表
  7. 导出会话信息列表

    • 接口路径POST /api/salesforce/session/export
    • 请求参数:筛选参数
    • 响应Excel 文件
  8. 查询会话信息详情

    • 接口路径GET /api/salesforce/session/{id}
    • 响应:会话信息详情
  9. 新增会话信息

    • 接口路径POST /api/salesforce/session
    • 请求参数:会话信息
    • 响应:成功/失败
  10. 修改会话信息

    • 接口路径PUT /api/salesforce/session
    • 请求参数:会话信息
    • 响应:成功/失败
  11. 删除会话信息

    • 接口路径DELETE /api/salesforce/session/{ids}
    • 请求参数:会话 ID 数组
    • 响应:成功/失败
  12. 根据 Session ID 查询会话信息

    • 接口路径GET /api/salesforce/session/by-session-id/{sessionId}
    • 响应:会话信息
  13. 查询最近一条活跃的会话信息

    • 接口路径GET /api/salesforce/session/latest-active
    • 响应:会话信息
  14. 根据 ORG 类型查询最近一条活跃的会话信息

    • 接口路径GET /api/salesforce/session/latest-active/{orgType}
    • 请求参数orgTypeS/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错误码映射