跳到主要内容
版本:0.3.x(Latest)

基本介绍

SessionService为插件提供在线会话的查询和管理能力。插件通过services.Session()获取该服务,用于分页查询在线会话列表和按TokenID撤销会话。

典型消费方是linapro-monitor-online插件,它提供在线用户监控功能,通过SessionService展示当前在线用户并支持管理员踢出会话。

设计思路

SessionService的设计围绕会话投影会话管理两个能力展开。

会话投影。 Session结构体是在线会话的稳定投影,包含以下字段:

字段说明
TokenId会话的唯一Token标识
TenantId会话所属租户,0表示平台
UserId认证用户ID
Username认证用户名
ClientType客户端类型
DeptName部门名称投影
Ip登录IP
Browser浏览器指纹
Os操作系统指纹
LoginTime首次登录时间
LastActiveTime最近活跃时间

会话过滤。 ListFilter支持按用户名和登录IP进行模糊匹配过滤,适用于管理员在大量会话中搜索特定用户。

架构位置

SessionService在会话管理链路中处于查询和管理层,与AuthService的会话注册层互补:

  • AuthService在认证流程中注册和撤销会话
  • SessionService在管理流程中查询和撤销会话
  • 两者共享同一会话存储,但职责不同

主要能力

方法说明
ListPage分页查询在线会话列表,支持用户名和IP模糊过滤
RevokeTokenID撤销一个在线会话,用户被踢出

设计约束

  • 会话是只读投影。 Session结构体是只读的,不能通过修改它来改变会话状态。需要撤销会话使用Revoke
  • 分页查询受租户范围影响。 平台管理员可以查询所有租户的会话,租户管理员只能查询本租户会话。
  • 撤销是即时生效。 Revoke执行后,对应Token立即失效,客户端下次请求将被拒绝。
  • DeptName是投影字段。 部门名称来自组织能力提供方的投影,如果组织能力不可用,该字段可能为空。

相关服务

  • AuthService - AuthService在认证流程中注册会话,SessionService在管理流程中查询会话
  • BizCtxService - 当前请求的会话信息投影到BizCtx
  • OrgService - Session中的DeptName来自组织能力投影