session在线人数根据userId去重

beetlsql3-dev
maLix 2 years ago
parent 3e1547700e
commit cc8eeedfbc

@ -3,6 +3,7 @@ package cn.jlw.Interceptor;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@ -26,6 +27,8 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import static cn.hutool.core.collection.IterUtil.getFirst;
import static com.ibeetl.admin.core.service.CorePlatformService.TOKEN_KEY;
import static com.ibeetl.admin.core.util.HttpRequestLocal.getOriginRequestToken;
import static com.ibeetl.admin.core.util.HttpRequestLocal.jwtTokenSplitTimestamp;
import static com.ibeetl.admin.core.util.servlet.ServletUtils.getRequest;
@ -238,4 +241,16 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
webPlatformService.setLoginUser(userLoginInfo);
return jwtToken;
}
/**
* jwt tokenuserId
* @param jwt
* @return
*/
public static String getUserIdByJwt(String jwt) {
String replaceStr = jwt.replace(TOKEN_KEY + ":", "");
DecodedJWT decode = JWT.decode(replaceStr);
return getFirst(decode.getAudience());
}
}

@ -14,11 +14,12 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import static cn.hutool.core.date.DatePattern.NORM_DATETIME_MINUTE_PATTERN;
import static cn.jlw.Interceptor.AuthenticationInterceptor.getUserIdByJwt;
import static com.ibeetl.admin.core.service.CorePlatformService.TOKEN_KEY;
/**
@ -51,6 +52,16 @@ public class OnLineRecordJob implements Job {
// 查询redis中现在还存在的session Key数量
Set<String> keys = CollUtil.emptyIfNull(stringRedisTemplate.keys(TOKEN_KEY + ":*"));
// session中保存用户id
HashSet<Object> sessionDistinctSet = new HashSet<>();
for (String key : keys) {
sessionDistinctSet.add(getUserIdByJwt(key));
}
// 在线人数
String sessionNum = sessionDistinctSet.size() + "";
// 格式化到分钟
// 这里注意需要控制5的倍数 00:15 00:30 00:45 00:00
Date nowDate = DateUtil.parse(DateUtil.now(), NORM_DATETIME_MINUTE_PATTERN);
@ -72,7 +83,7 @@ public class OnLineRecordJob implements Job {
// model.setMethod(ON_LINE_METHOD_NAME);
// model.setRequestUrl("在线人数统计");
// model.setParams("");
// model.setResult(keys.size() + "");
// model.setResult(sessionNum);
// model.setIp("127.0.0.1");
// model.setCreateTime(nowDate);
// model.setResultTime(nowDate);
@ -92,13 +103,13 @@ public class OnLineRecordJob implements Job {
model.setMethod(ON_LINE_METHOD_NAME);
model.setRequestUrl("在线人数统计");
model.setParams("");
model.setResult(keys.size() + "");
model.setResult(sessionNum);
model.setIp("127.0.0.1");
model.setCreateTime(nowDate);
model.setResultTime(nowDate);
sysLogService.insert(model);
}else {
getSysLog.setResult(keys.size() + "");
getSysLog.setResult(sessionNum);
sysLogDao.updateById(getSysLog);
}

@ -161,7 +161,7 @@ public class ApplicationRunnerController implements ApplicationRunner {
quartz.setJobClassName("com.ibeetl.jlw.job.OnLineRecordJob");
quartz.setDescription("计划任务启动OnLineRecordJob");
// 每过15分钟 执行一次任务 00:15 00:30 00:45 00:00
quartz.setCronExpression("0 15,30,45,00 * * * ?");
quartz.setCronExpression("0 15,20,30,45,00 * * * ?");
quartzService.save(quartz, null);
}

Loading…
Cancel
Save