This commit is contained in:
2025-07-25 16:18:33 +08:00
parent c09cbc3f01
commit a4c6140ed5
50 changed files with 2249 additions and 1599 deletions
@@ -0,0 +1,87 @@
package com.emotion.util;
import lombok.extern.slf4j.Slf4j;
/**
* 当前用户工具类
* 提供便捷的方法获取当前登录用户信息
*
* @author emotion-museum
* @date 2025-07-25
*/
@Slf4j
public class CurrentUserUtil {
/**
* 获取当前用户ID
*
* @return 当前用户ID,如果未登录则返回null
*/
public static String getCurrentUserId() {
return UserContextHolder.getCurrentUserId();
}
/**
* 获取当前用户名
*
* @return 当前用户名,如果未登录则返回null
*/
public static String getCurrentUsername() {
return UserContextHolder.getCurrentUsername();
}
/**
* 获取当前用户Token
*
* @return 当前用户Token,如果未登录则返回null
*/
public static String getCurrentToken() {
return UserContextHolder.getCurrentToken();
}
/**
* 检查当前是否有用户登录
*
* @return 是否有用户登录
*/
public static boolean isUserLoggedIn() {
return UserContextHolder.hasUserContext();
}
/**
* 获取当前用户ID,如果未登录则抛出异常
*
* @return 当前用户ID
* @throws IllegalStateException 如果用户未登录
*/
public static String requireCurrentUserId() {
String userId = getCurrentUserId();
if (userId == null || userId.trim().isEmpty()) {
throw new IllegalStateException("用户未登录或认证失败");
}
return userId;
}
/**
* 获取当前用户名,如果未登录则抛出异常
*
* @return 当前用户名
* @throws IllegalStateException 如果用户未登录
*/
public static String requireCurrentUsername() {
String username = getCurrentUsername();
if (username == null || username.trim().isEmpty()) {
throw new IllegalStateException("用户未登录或认证失败");
}
return username;
}
/**
* 获取当前用户上下文摘要信息
*
* @return 用户上下文摘要
*/
public static String getContextSummary() {
return UserContextHolder.getContextSummary();
}
}
@@ -37,6 +37,11 @@ public class UserContextHolder {
*/
private static final ThreadLocal<String> REQUEST_ID_HOLDER = new ThreadLocal<>();
/**
* Token线程本地变量
*/
private static final ThreadLocal<String> TOKEN_HOLDER = new ThreadLocal<>();
/**
* 设置当前用户ID
*
@@ -125,12 +130,31 @@ public class UserContextHolder {
/**
* 获取请求ID
*
*
* @return 请求ID
*/
public static String getRequestId() {
return REQUEST_ID_HOLDER.get();
}
/**
* 设置当前Token
*
* @param token Token
*/
public static void setCurrentToken(String token) {
TOKEN_HOLDER.set(token);
log.debug("设置当前Token: {}", token != null ? "***" : null);
}
/**
* 获取当前Token
*
* @return Token
*/
public static String getCurrentToken() {
return TOKEN_HOLDER.get();
}
/**
* 设置用户上下文信息
@@ -188,6 +212,13 @@ public class UserContextHolder {
REQUEST_ID_HOLDER.remove();
}
/**
* 清除当前Token
*/
public static void clearToken() {
TOKEN_HOLDER.remove();
}
/**
* 清除所有用户上下文信息
*/
@@ -197,6 +228,7 @@ public class UserContextHolder {
clearUserType();
clearClientIp();
clearRequestId();
clearToken();
log.debug("清除所有用户上下文信息");
}