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}")
private String HTTPS_URL_PREFIX;
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}")
private long sdkAppId;
@@ -73,23 +73,29 @@ public class TencentCloudImUtil {
return System.currentTimeMillis() + "" + StrUtil.subSuf(Math.random() + "", 2);
}
private String buildUserSigKey(String identifier) {
return REDIS_IM_USER_SIG_PREFIX + sdkAppId + ":" + identifier;
}
/**
* 获取腾讯云用户签名
*/
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)) {
userSig = tximUtil.genUserSig(APP_MANAGER);
redisServiceUtil.set(REDIS_IM_USER_SIG + APP_MANAGER, userSig, 86400L);
redisServiceUtil.set(key, userSig, 86400L);
}
return userSig;
}
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)) {
userSig = tximUtil.genUserSig(userId);
redisServiceUtil.set(REDIS_IM_USER_SIG + userId, userSig, 86400L);
redisServiceUtil.set(key, userSig, 86400L);
}
return userSig;
}