From 4b7efb7baea5b99d087b8d1c95eff704c053ab79 Mon Sep 17 00:00:00 2001
From: TanYibin <5491541@qq.com>
Date: Tue, 13 Jun 2023 09:36:54 +0800
Subject: [PATCH] 访问限制添加优化

---
 huaheng-wms-core/pom.xml                                                                      |  9 +++++++--
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java |  2 +-
 huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengRedisUtil.java                          |  8 ++++----
 huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/AccessLimitInterceptor.java        | 25 +++++++++++--------------
 4 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/huaheng-wms-core/pom.xml b/huaheng-wms-core/pom.xml
index 076d6fe..c8fc1ae 100644
--- a/huaheng-wms-core/pom.xml
+++ b/huaheng-wms-core/pom.xml
@@ -42,7 +42,7 @@
             <groupId>org.redisson</groupId>
             <artifactId>redisson</artifactId>
         </dependency>
-        
+
         <dependency>
             <groupId>cn.monitor4all</groupId>
             <artifactId>log-record-starter</artifactId>
@@ -54,6 +54,11 @@
             <version>1.69</version>
         </dependency>
         <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.4.7</version>
+        </dependency>
+        <dependency>
             <groupId>com.googlecode.log4jdbc</groupId>
             <artifactId>log4jdbc</artifactId>
             <version>1.2</version>
@@ -128,7 +133,7 @@
             <artifactId>spring-boot-configuration-processor</artifactId>
             <optional>true</optional>
         </dependency>
-        <!--获取apk信息-->
+        <!--获取apk信息 -->
         <dependency>
             <groupId>net.dongliu</groupId>
             <artifactId>apk-parser</artifactId>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java
index 47d7af5..2091af3 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java
@@ -46,7 +46,7 @@ public class TestController extends HuahengBaseController {
     @Autowired
     private ApplicationConfig applicationConfig;
 
-//    @AccessLimit(seconds = 1, maxCount = 10)
+    @AccessLimit(seconds = 10, maxCount = 2)
     @PostMapping(value = "/testLimiter")
     public Result<?> testLimiter(@RequestBody Map<String, String> paramMap) {
         return Result.OK();
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengRedisUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengRedisUtil.java
index 17ea09f..4fc4436 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengRedisUtil.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengRedisUtil.java
@@ -3,9 +3,9 @@ package org.jeecg.utils;
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Resource;
 
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
@@ -23,8 +23,8 @@ import lombok.extern.slf4j.Slf4j;
 @Component
 public class HuahengRedisUtil {
 
-    @Resource
-    private RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    private StringRedisTemplate redisTemplate;
 
     private static String toJson(Object obj) {
         if (obj == null) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/AccessLimitInterceptor.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/AccessLimitInterceptor.java
index 4709252..3fc6821 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/AccessLimitInterceptor.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/AccessLimitInterceptor.java
@@ -37,26 +37,23 @@ public class AccessLimitInterceptor extends HandlerInterceptorAdapter {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         if (handler instanceof HandlerMethod) {
-            HandlerMethod hm = (HandlerMethod)handler;
+            HandlerMethod handlerMethod = (HandlerMethod)handler;
             // 获取方法中的注解,看是否有该注解
-            AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
+            AccessLimit accessLimit = handlerMethod.getMethodAnnotation(AccessLimit.class);
             if (accessLimit == null) {
                 return true;
             }
             int seconds = accessLimit.seconds();
             int maxCount = accessLimit.maxCount();
-            String requestURI = request.getRequestURI();
-            log.info(ServletUtil.getBody(request));
-            Integer count = huahengRedisUtil.get(requestURI, Integer.class);
-            if (count == null) {
-                // 第一次访问
-                huahengRedisUtil.set(requestURI, 1, seconds);
-            } else if (count < maxCount) {
-                // 加1
-                huahengRedisUtil.incr(requestURI, seconds);
-            } else {
-                log.error("{},超出访问频次限制。限制频次:{}次/{}秒", requestURI, maxCount, seconds);
-                throw new JeecgBootException("超出访问频次限制");
+            String accessLimitKey = "Access_Limit_" + request.getRequestURI();
+            synchronized (accessLimitKey) {
+                Integer count = huahengRedisUtil.get(accessLimitKey, Integer.class);
+                if (count == null || count < maxCount) {
+                    huahengRedisUtil.incr(accessLimitKey, seconds);
+                } else {
+                    log.error("{},超出访问频次限制。限制频次:{}秒{}次", request.getRequestURI(), maxCount, seconds);
+                    throw new JeecgBootException("超出访问频次限制");
+                }
             }
         }
         return true;
--
libgit2 0.22.2