fix(IM): Redis签名key加入sdkAppId,防止切换AppID后签名不匹配

- key格式: silence:im_user_sig:{sdkAppId}:{identifier}
- 切换IMConfig.sdkAppId后自动缓存miss,重新生成正确签名
- 旧key作为孤儿数据24小时后自然过期
This commit is contained in:
2026-07-20 10:43:07 +08:00
parent 1a5a2dcb3f
commit be701122ca
@@ -48,7 +48,7 @@ public class TencentCloudImUtil {
@Value("${IMConfig.requestUrl}") @Value("${IMConfig.requestUrl}")
private String HTTPS_URL_PREFIX; private String HTTPS_URL_PREFIX;
private static final String APP_MANAGER = "administrator"; private static final String APP_MANAGER = "administrator";
private static final String REDIS_IM_USER_SIG = "silence:im_user_sig:"; private static final String REDIS_IM_USER_SIG_PREFIX = "silence:im_user_sig:";
@Value("${IMConfig.sdkAppId}") @Value("${IMConfig.sdkAppId}")
private long sdkAppId; private long sdkAppId;
@@ -73,23 +73,29 @@ public class TencentCloudImUtil {
return System.currentTimeMillis() + "" + StrUtil.subSuf(Math.random() + "", 2); return System.currentTimeMillis() + "" + StrUtil.subSuf(Math.random() + "", 2);
} }
private String buildUserSigKey(String identifier) {
return REDIS_IM_USER_SIG_PREFIX + sdkAppId + ":" + identifier;
}
/** /**
* 获取腾讯云用户签名 * 获取腾讯云用户签名
*/ */
public String getTxCloudUserSig() { public String getTxCloudUserSig() {
String userSig = (String) redisServiceUtil.get(REDIS_IM_USER_SIG + APP_MANAGER); String key = buildUserSigKey(APP_MANAGER);
String userSig = (String) redisServiceUtil.get(key);
if (StringUtils.isEmpty(userSig)) { if (StringUtils.isEmpty(userSig)) {
userSig = tximUtil.genUserSig(APP_MANAGER); userSig = tximUtil.genUserSig(APP_MANAGER);
redisServiceUtil.set(REDIS_IM_USER_SIG + APP_MANAGER, userSig, 86400L); redisServiceUtil.set(key, userSig, 86400L);
} }
return userSig; return userSig;
} }
public String userSigAndroid(String userId) { public String userSigAndroid(String userId) {
String userSig = (String) redisServiceUtil.get(REDIS_IM_USER_SIG + userId); String key = buildUserSigKey(userId);
String userSig = (String) redisServiceUtil.get(key);
if (StringUtils.isEmpty(userSig)) { if (StringUtils.isEmpty(userSig)) {
userSig = tximUtil.genUserSig(userId); userSig = tximUtil.genUserSig(userId);
redisServiceUtil.set(REDIS_IM_USER_SIG + userId, userSig, 86400L); redisServiceUtil.set(key, userSig, 86400L);
} }
return userSig; return userSig;
} }