UserContextHolder 用户上下文工具类 
| 属性名称 | 属性值 | 
|---|---|
| 所在模块 | continew-common | 
| 类路径 | top.continew.admin.common.context.UserContextHolder | 
| 描述 | 用户上下文管理工具类 | 
简介 
UserContextHolder 是一个基于 ThreadLocal 实现的用户上下文管理工具类,用于存储和访问当前线程的用户信息。它与 Sa-Token 框架紧密集成,实现了用户会话的有效管理。该类提供了丰富的静态方法,方便快速存取用户基本信息、权限信息及登录环境等上下文数据。
核心功能 
- 用户上下文管理:存储和获取当前线程的用户信息
- 额外上下文管理:存储和获取当前线程的用户登录环境信息(IP、浏览器、操作系统等)
- 信息快捷访问:提供便捷方法获取用户ID、用户名、昵称等核心信息
- 权限判断功能:提供判断当前用户是否为超级管理员等实用方法
常用 API 
用户上下文管理 
设置用户上下文 
java
// 设置上下文并更新会话
public static void setContext(UserContext context)
// 设置上下文,可选择是否更新会话
public static void setContext(UserContext context, boolean isUpdate)获取用户上下文 
java
// 获取当前用户的上下文
public static UserContext getContext()
// 获取指定用户ID的上下文
public static UserContext getContext(Long userId)清除上下文 
java
// 清除当前线程的用户上下文和额外上下文
public static void clearContext()用户额外上下文管理 
设置用户额外上下文 
java
public static void setExtraContext(UserExtraContext context)获取用户额外上下文 
java
// 获取当前用户的额外上下文
public static UserExtraContext getExtraContext()
// 根据令牌获取用户额外上下文
public static UserExtraContext getExtraContext(String token)用户信息快捷访问 
java
// 获取当前用户ID
public static Long getUserId()
// 获取当前用户名
public static String getUsername()
// 获取当前用户昵称
public static String getNickname()
// 获取指定用户ID的昵称
public static String getNickname(Long userId)
// 获取当前用户的租户 ID
Long tenantId = UserContextHolder.getTenantId();权限判断 
java
// 判断当前用户是否为超级管理员用户
boolean isSuperAdminUser = UserContextHolder.isSuperAdminUser();
// 判断当前用户是否为租户管理员用户
boolean isTenantAdminUser = UserContextHolder.isTenantAdminUser();使用示例 
获取当前用户信息 
java
// 获取当前登录用户ID
Long userId = UserContextHolder.getUserId();
// 获取当前登录用户名
String username = UserContextHolder.getUsername();
// 获取当前登录用户昵称
String nickname = UserContextHolder.getNickname();获取用户上下文详细信息 
java
// 获取完整的用户上下文对象
UserContext userContext = UserContextHolder.getContext();
// 获取用户权限列表
Set<String> permissions = userContext.getPermissions();
// 获取用户角色编码列表
Set<String> roleCodes = userContext.getRoleCodes();
// 判断密码是否过期
boolean isPasswordExpired = userContext.isPasswordExpired();获取用户登录环境信息 
java
// 获取用户额外上下文
UserExtraContext extraContext = UserContextHolder.getExtraContext();
// 获取用户IP地址
String ip = extraContext.getIp();
// 获取用户IP归属地
String address = extraContext.getAddress();
// 获取用户浏览器信息
String browser = extraContext.getBrowser();
// 获取用户操作系统信息
String os = extraContext.getOs();
// 获取用户登录时间
LocalDateTime loginTime = extraContext.getLoginTime();注意事项 
- 内存泄漏防护:由于使用 ThreadLocal 存储用户上下文,使用完毕后务必调用 clearContext()方法清除上下文,避免内存泄漏。
- 多线程处理:在多线程环境下,子线程无法自动继承父线程的 ThreadLocal 变量。如需在子线程中访问用户上下文,需手动传递。
- 框架依赖:该类与 Sa-Token 框架紧密集成,部分方法依赖于 Sa-Token 的会话管理功能。
- 异常处理:获取用户信息时使用 ExceptionUtils.exToNull()方法进行异常处理,用户未登录时会返回null而非抛出异常。
- 权限检查前置条件:isSuperAdminUser()方法会先检查用户是否已登录,未登录时会抛出异常,使用前应确保用户已登录状态。