fix(IM): Redis签名key加入sdkAppId,防止切换AppID后签名不匹配
- key格式: silence:im_user_sig:{sdkAppId}:{identifier}
- 切换IMConfig.sdkAppId后自动缓存miss,重新生成正确签名
- 旧key作为孤儿数据24小时后自然过期
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user