主持人问题

This commit is contained in:
2025-12-27 20:08:05 +08:00
parent 750c112eac
commit 5db025b10f
4 changed files with 66 additions and 104 deletions

View File

@@ -44,15 +44,34 @@ public class JitsiTokenServiceImpl implements JitsiTokenService {
userContext.put("name", userName);
userContext.put("moderator", isModerator);
// 构建affiliation (这是Jitsi识别主持人的关键字段)
Map<String, Object> user = new HashMap<>();
user.put("id", userId);
user.put("name", userName);
user.put("moderator", isModerator);
user.put("affiliation", isModerator ? "owner" : "member"); // owner=主持人, member=普通成员
// 构建context
Map<String, Object> context = new HashMap<>();
context.put("user", user);
// 【调试日志】打印用户上下文
logger.info("【JWT用户上下文】roomName={}, userId={}, userName={}, isModerator={}, affiliation={}, user={}",
roomName, userId, userName, isModerator, isModerator ? "owner" : "member", user);
// 构建JWT claims
Map<String, Object> claims = new HashMap<>();
claims.put("context", Map.of("user", userContext));
claims.put("context", context);
claims.put("room", roomName);
claims.put("iss", jitsiProperties.getApp().getId());
claims.put("aud", "jitsi");
claims.put("sub", jitsiProperties.getServer().getUrl());
claims.put("exp", exp / 1000); // 秒级时间戳
claims.put("nbf", now / 1000);
claims.put("moderator", isModerator); // 在顶层也添加moderator字段
// 【调试日志】打印完整claims
logger.info("【JWT Claims】roomName={}, claims={}", roomName, claims);
// 构建JWT Header必须包含 typ: JWT
Map<String, Object> header = new HashMap<>();

View File

@@ -126,6 +126,11 @@ public class VideoMeetingServiceImpl implements VideoMeetingService {
meetingDTO.setCreator(userId);
meetingDTO.setCreatorType(userType);
meetingDTO.setCreatorName(userName);
// 【调试日志】打印会议创建者信息
logger.info("【创建会议】meetingId={}, 创建者userId=[{}](类型:{}), creatorName={}, creatorType={}",
meetingId, userId, userId.getClass().getSimpleName(), userName, userType);
meetingDTO.setParticipantCount(0);
meetingDTO.setOptsn(IdUtil.getOptsn());
@@ -330,6 +335,13 @@ public class VideoMeetingServiceImpl implements VideoMeetingService {
// 会议创建人才是主持人
boolean isModerator = userId.equals(meeting.getCreator());
// 【调试日志】打印主持人判断详情
logger.info("【主持人判断】meetingId={}, 当前用户ID=[{}](类型:{}), 创建者ID=[{}](类型:{}), isModerator={}",
meetingId,
userId, userId.getClass().getSimpleName(),
meeting.getCreator(), meeting.getCreator() != null ? meeting.getCreator().getClass().getSimpleName() : "null",
isModerator);
if (members != null && !members.isEmpty()) {
ChatMemberVO member = members.get(0);
userName = member.getUserName();
@@ -343,6 +355,9 @@ public class VideoMeetingServiceImpl implements VideoMeetingService {
isModerator
);
logger.info("【JWT Token生成】meetingId={}, userId={}, userName={}, isModerator={}",
meetingId, userId, userName, isModerator);
// 7. 构建真正的Jitsi iframe URL
String jitsiIframeUrl = jitsiTokenService.buildIframeUrl(
meeting.getJitsiRoomName(),