feat: 处理在非Web线程中获取Request中token失败的问题;

This commit is contained in:
likunlong
2025-08-19 17:39:20 +08:00
committed by Administrator
parent 359cee28d5
commit c43d4784de
4 changed files with 15 additions and 3 deletions

View File

@@ -77,4 +77,9 @@ public class ChatRequest {
*/
private Boolean autoSelectModel;
/**
* 会话令牌为避免在非Web线程中获取Request入口处注入
*/
private String token;
}

View File

@@ -128,8 +128,8 @@ public class ImageServiceImpl implements IChatService {
OpenAiStreamClient openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey());
List<Message> messages = chatRequest.getMessages();
// 获取会话token
String token = StpUtil.getTokenValue();
// 获取会话token从入口透传避免非Web线程取值报错
String token = chatRequest.getToken();
// 创建 SSE 事件源监听器
SSEEventSourceListener listener = new SSEEventSourceListener(emitter, chatRequest.getUserId(), chatRequest.getSessionId(), token);

View File

@@ -58,7 +58,7 @@ public class OpenAIServiceImpl implements IChatService {
Message userMessage = Message.builder().content("工具返回信息:"+toolString).role(Message.Role.USER).build();
messages.add(userMessage);
}
String token = StpUtil.getTokenValue();
String token = chatRequest.getToken();
SSEEventSourceListener listener = new SSEEventSourceListener(emitter,chatRequest.getUserId(),chatRequest.getSessionId(), token);
ChatCompletion completion = ChatCompletion
.builder()

View File

@@ -47,6 +47,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import cn.dev33.satoken.stp.StpUtil;
/**
* @author ageer
@@ -77,6 +78,12 @@ public class SseServiceImpl implements ISseService {
public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) {
SseEmitter sseEmitter = new SseEmitter(0L);
try {
// 记录当前会话令牌,供异步线程使用
try {
chatRequest.setToken(StpUtil.getTokenValue());
} catch (Exception ignore) {
// 保底无token场景下忽略
}
// 构建消息列表
buildChatMessageList(chatRequest);
// 设置对话角色