[fix][feat](chat): 添加会话中SaToken-token值传递和使用;修复“自动注入警告 => 用户未登录”

- 新增 BaseContext 类,用于保存和获取当前登录用户的 token
- 在 OpenAIServiceImpl 和 imageServiceImpl 中获取当前会话 token
- 将 token 作为参数传递给 SSEEventSourceListener
- 在 SSEEventSourceListener 中使用 token 进行用户身份验证和权限控制
- 修改 LoginHelper,增加根据 token 获取登录用户信息的方法
- 更新 InjectionMetaObjectHandler,使用 BaseContext 获取当前 token
- 修复对话时出先”自动注入警告 => 用户未登录“
This commit is contained in:
Yzm
2025-07-05 19:12:33 +08:00
parent df3b687be4
commit daa7b7315b
6 changed files with 57 additions and 4 deletions

View File

@@ -0,0 +1,25 @@
package org.ruoyi.common.core.service;
/**
* @description: 基于ThreadLocal封装工具类用户保存和获取当前登录用户Sa-Token token值
* @author: yzm
**/
public class BaseContext {
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
/**
* @description: 设置值
* @author: yzm
* @param: [token] 线程token
**/
public static void setCurrentToken(String token){
threadLocal.set(token);
}
/**
* @description: 获取值
* @author: yzm
**/
public static String getCurrentToken(){
return threadLocal.get();
}
}

View File

@@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.ruoyi.common.core.domain.model.LoginUser;
import org.ruoyi.common.core.exception.ServiceException;
import org.ruoyi.common.core.service.BaseContext;
import org.ruoyi.common.core.utils.ObjectUtils;
import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.core.domain.BaseEntity;
@@ -91,7 +92,8 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
private LoginUser getLoginUser() {
LoginUser loginUser;
try {
loginUser = LoginHelper.getLoginUser();
String token = BaseContext.getCurrentToken();
loginUser = LoginHelper.getLoginUser(token);
} catch (Exception e) {
log.warn("自动注入警告 => 用户未登录");
return null;

View File

@@ -9,12 +9,16 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.ruoyi.common.core.constant.TenantConstants;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.core.domain.model.LoginUser;
import org.ruoyi.common.core.enums.DeviceType;
import org.ruoyi.common.core.enums.UserType;
import org.ruoyi.common.redis.utils.RedisUtils;
import java.util.Map;
import java.util.Set;
/**
@@ -29,6 +33,7 @@ import java.util.Set;
*
* @author Lion Li
*/
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginHelper {
@@ -82,6 +87,15 @@ public class LoginHelper {
return loginUser;
}
public static <T extends LoginUser> T getLoginUser(String token) {
SaSession session = StpUtil.getTokenSessionByToken(token);
if (ObjectUtil.isNull(session)) {
return null;
}
return (T) session.get(LOGIN_USER_KEY);
}
/**
* 获取用户id
*/