From cc8eeedfbc82c9d71b0d4e11cf02232a51d1a569 Mon Sep 17 00:00:00 2001 From: maLix Date: Tue, 4 Jul 2023 00:47:46 +0800 Subject: [PATCH] =?UTF-8?q?session=E5=9C=A8=E7=BA=BF=E4=BA=BA=E6=95=B0?= =?UTF-8?q?=E6=A0=B9=E6=8D=AEuserId=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuthenticationInterceptor.java | 15 +++++++++++++++ .../com/ibeetl/jlw/job/OnLineRecordJob.java | 19 +++++++++++++++---- .../jlw/web/ApplicationRunnerController.java | 2 +- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/web/src/main/java/cn/jlw/Interceptor/AuthenticationInterceptor.java b/web/src/main/java/cn/jlw/Interceptor/AuthenticationInterceptor.java index 22502208..9c37dd9a 100644 --- a/web/src/main/java/cn/jlw/Interceptor/AuthenticationInterceptor.java +++ b/web/src/main/java/cn/jlw/Interceptor/AuthenticationInterceptor.java @@ -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 token中获取用户的userId + * @param jwt + * @return + */ + public static String getUserIdByJwt(String jwt) { + String replaceStr = jwt.replace(TOKEN_KEY + ":", ""); + DecodedJWT decode = JWT.decode(replaceStr); + return getFirst(decode.getAudience()); + } } \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java b/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java index f470564c..76878d67 100644 --- a/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java +++ b/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java @@ -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 keys = CollUtil.emptyIfNull(stringRedisTemplate.keys(TOKEN_KEY + ":*")); + + // session中保存用户id + HashSet 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); } diff --git a/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java b/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java index f7fb33a8..ded7e328 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java @@ -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); }