From 81e435e4a08edec018cd02f82365a14ff3968f15 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Mon, 25 Dec 2023 15:24:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=BF=87=E6=BB=A4=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=9A=84=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/common/core/redis/RedisCache.java | 2 +- .../java/com/jsowell/netty/handler/AbstractHandler.java | 8 ++++---- .../com/jsowell/netty/handler/LoginRequestHandler.java | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/core/redis/RedisCache.java b/jsowell-common/src/main/java/com/jsowell/common/core/redis/RedisCache.java index c6c95953c..b2987c5d7 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/core/redis/RedisCache.java +++ b/jsowell-common/src/main/java/com/jsowell/common/core/redis/RedisCache.java @@ -376,7 +376,7 @@ public class RedisCache { * @param key 键 * @param value 值 * @param expireTime 过期时间,单位秒 - * @return + * @return true: set成功; false失败表示已有值 */ public Boolean setnx(String key, String value, long expireTime) { return redisTemplate.opsForValue().setIfAbsent(key, value, expireTime, TimeUnit.SECONDS); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java index ac74245b1..a3eac19cc 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/AbstractHandler.java @@ -76,17 +76,17 @@ public abstract class AbstractHandler implements InitializingBean { /** * 阻止重复帧 + * @return true 重复 */ protected boolean verifyTheDuplicateRequest(YKCDataProtocol ykcDataProtocol, Channel channel) { // 获取序列号域 int serialNumber = BytesUtil.bytesToIntLittle(ykcDataProtocol.getSerialNumber()); // 获取channelId String channelId = channel.id().asShortText(); - String redisKey = "Request_" + channelId + "_" + serialNumber; - - - return false; + Boolean result = redisCache.setnx(redisKey, ykcDataProtocol.getHEXString(), 30); + // result返回false说明没有设置成功,就是说已经有相同请求了,所以返回true重复 + return !result; } } \ No newline at end of file diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java index 9f89984ba..b2eeab229 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java @@ -163,8 +163,9 @@ public class LoginRequestHandler extends AbstractHandler { String business = BytesUtil.bcd2Str(businessTypeByteArr); // *********************** 字段解析完成,下面进行逻辑处理 *********************** // - verifyTheDuplicateRequest(ykcDataProtocol, channel); - + if (verifyTheDuplicateRequest(ykcDataProtocol, channel)) { + return null; + } LoginRequestData loginRequestData = LoginRequestData.builder() .pileSn(pileSn)