From c56d7d2e81db193263549284f80b30b7e402ec53 Mon Sep 17 00:00:00 2001 From: jishenghua <752718920@qq.com> Date: Mon, 10 Nov 2025 23:18:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=97=B6=E5=B0=86=E8=A2=AB=E5=88=A0=E9=99=A4=E7=9A=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9A=84=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81=E4=BB=8E?= =?UTF-8?q?redis=E7=A7=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsh/erp/service/RedisService.java | 30 ++++++++++++++++--- .../java/com/jsh/erp/service/UserService.java | 6 ++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/RedisService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/RedisService.java index 4ccd1b2b..fb397c8e 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/RedisService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/RedisService.java @@ -3,6 +3,7 @@ package com.jsh.erp.service; import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.serializer.RedisSerializer; @@ -153,10 +154,31 @@ public class RedisService { public void deleteObjectByUserAndIp(Long userId, String clientIp){ Set tokens = redisTemplate.keys("*"); for(String token : tokens) { - Object userIdValue = redisTemplate.opsForHash().get(token, "userId"); - Object clientIpValue = redisTemplate.opsForHash().get(token, "clientIp"); - if(userIdValue!=null && clientIpValue!=null && userIdValue.equals(userId.toString()) && clientIpValue.equals(clientIp)) { - redisTemplate.opsForHash().delete(token, "userId"); + // 检查键是否存在且为哈希类型 + if (redisTemplate.hasKey(token) && redisTemplate.type(token) == DataType.HASH) { + Object userIdValue = redisTemplate.opsForHash().get(token, "userId"); + Object clientIpValue = redisTemplate.opsForHash().get(token, "clientIp"); + if(userIdValue!=null && clientIpValue!=null && userIdValue.equals(userId.toString()) && clientIpValue.equals(clientIp)) { + redisTemplate.opsForHash().delete(token, "userId"); + } + } + } + } + + /** + * @author jisheng hua + * 将信息从redis中移除,比对user + * @param userId + */ + public void deleteObjectByUser(Long userId){ + Set tokens = redisTemplate.keys("*"); + for(String token : tokens) { + // 检查键是否存在且为哈希类型 + if (redisTemplate.hasKey(token) && redisTemplate.type(token) == DataType.HASH) { + Object userIdValue = redisTemplate.opsForHash().get(token, "userId"); + if(userIdValue!=null && userIdValue.equals(userId.toString())) { + redisTemplate.opsForHash().delete(token, "userId"); + } } } } diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/UserService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/UserService.java index e57764ef..a04c78f1 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/UserService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/UserService.java @@ -267,6 +267,12 @@ public class UserService { Object userId = redisService.getObjectFromSessionByKey(request,"userId"); if (userId != null) { result = userMapperEx.batDeleteOrUpdateUser(idsArray); + if(result>0) { + //从redis中移除这些用户的登录状态 + for (String idStr : idsArray) { + redisService.deleteObjectByUser(Long.valueOf(idStr)); + } + } logService.insertLog("用户", sb.toString(), ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); }