主持人问题
This commit is contained in:
@@ -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<>();
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user