From 6cf353c31ed73129718ef337d8525f6539761756 Mon Sep 17 00:00:00 2001
From: D <3066417822@qq.com>
Date: Thu, 25 Jan 2024 10:58:24 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=99=90=E6=B5=81=E7=9A=84?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=B1=BB=E5=9E=8B=EF=BC=8C=E8=A1=A5=E5=85=85?=
=?UTF-8?q?CommonController=E6=B3=A8=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/限流逻辑.drawio | 37 ++++++++++++++++++
.../controller/common/CommonController.java | 5 ++-
.../ruoyi/common/annotation/RateLimiter.java | 1 +
.../com/ruoyi/common/enums/LimitType.java | 15 +++++--
.../framework/aspectj/RateLimiterAspect.java | 39 ++++++++-----------
5 files changed, 70 insertions(+), 27 deletions(-)
create mode 100644 doc/限流逻辑.drawio
diff --git a/doc/限流逻辑.drawio b/doc/限流逻辑.drawio
new file mode 100644
index 0000000..eceb279
--- /dev/null
+++ b/doc/限流逻辑.drawio
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index ef30a04..d966ad8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -25,6 +25,7 @@ import com.ruoyi.framework.config.ServerConfig;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -85,7 +86,7 @@ public class CommonController {
*/
@Operation(summary = "通用上传请求(单个)")
@PostMapping("/upload")
- public AjaxResult uploadFile(MultipartFile file) throws Exception {
+ public AjaxResult uploadFile(@RequestBody MultipartFile file) throws Exception {
try {
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
@@ -108,7 +109,7 @@ public class CommonController {
*/
@Operation(summary = "通用上传请求(多个)")
@PostMapping("/uploads")
- public AjaxResult uploadFiles(List files)
+ public AjaxResult uploadFiles(@RequestBody List files)
throws Exception {
try {
// 上传文件路径
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java
index 0f024c7..49e031f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java
@@ -5,6 +5,7 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.enums.LimitType;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java
index c609fd8..9ae87f6 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java
@@ -6,8 +6,7 @@ package com.ruoyi.common.enums;
* @author ruoyi
*/
-public enum LimitType
-{
+public enum LimitType {
/**
* 默认策略全局限流
*/
@@ -16,5 +15,15 @@ public enum LimitType
/**
* 根据请求者IP进行限流
*/
- IP
+ IP,
+
+ /**
+ * 根据请求者的用户ID进行限流
+ */
+ USER,
+
+ /**
+ * 根据请求者的部门进行限流
+ */
+ DEPT,
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
index b720bc1..9d27f59 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java
@@ -3,6 +3,7 @@ package com.ruoyi.framework.aspectj;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
+
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@@ -13,9 +14,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component;
+
import com.ruoyi.common.annotation.RateLimiter;
import com.ruoyi.common.enums.LimitType;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ip.IpUtils;
@@ -26,8 +29,7 @@ import com.ruoyi.common.utils.ip.IpUtils;
*/
@Aspect
@Component
-public class RateLimiterAspect
-{
+public class RateLimiterAspect {
private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class);
private RedisTemplate