From 40ae59240b68059155206ef5051009a0c512b0f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=AF=E5=87=AF?= <371894675@qq.com>
Date: Tue, 3 Oct 2023 22:40:37 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=20=E4=BD=BF=E7=94=A8aop?=
=?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=E5=B9=82?=
=?UTF-8?q?=E7=AD=89=E6=80=A7=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 4 ++
.../java/com/durant/annotion/Independent.java | 19 ++++++++
.../com/durant/aspect/IndependentAspect.java | 45 +++++++++++++++++++
.../durant/controller/LoginController.java | 12 ++---
4 files changed, 74 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/com/durant/annotion/Independent.java
create mode 100644 src/main/java/com/durant/aspect/IndependentAspect.java
diff --git a/pom.xml b/pom.xml
index c57922e..eb1fcef 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,10 @@
mybatis-spring-boot-starter
2.3.1
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
diff --git a/src/main/java/com/durant/annotion/Independent.java b/src/main/java/com/durant/annotion/Independent.java
new file mode 100644
index 0000000..0b4238a
--- /dev/null
+++ b/src/main/java/com/durant/annotion/Independent.java
@@ -0,0 +1,19 @@
+package com.durant.annotion;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author 冯凯
+ * @version 1.0
+ * @description: TODO
+ * @date 2023/10/3 22:02
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Independent {
+
+
+}
diff --git a/src/main/java/com/durant/aspect/IndependentAspect.java b/src/main/java/com/durant/aspect/IndependentAspect.java
new file mode 100644
index 0000000..f754774
--- /dev/null
+++ b/src/main/java/com/durant/aspect/IndependentAspect.java
@@ -0,0 +1,45 @@
+package com.durant.aspect;
+
+import com.durant.annotion.Independent;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author 冯凯
+ * @version 1.0
+ * @description: TODO
+ * @date 2023/10/3 22:05
+ */
+@Aspect
+@Component
+public class IndependentAspect {
+ private Object result=null;
+ private Map resultMap=new ConcurrentHashMap<>();
+
+ @Around("@annotation(independent)")
+ public Object independent(ProceedingJoinPoint joinPoint, Independent independent) throws Throwable {
+
+ String id = generateId(joinPoint.getArgs());
+ if (resultMap.containsKey(id)){
+ System.out.println("不要重复提交请求");
+ return resultMap.get(id);
+ }
+
+ result= joinPoint.proceed();
+ resultMap.put(id,result);
+ return result;
+ }
+
+ private String generateId(Object[] args){
+ StringBuilder stringBuilder = new StringBuilder();
+ for (Object arg : args) {
+ stringBuilder.append(arg.hashCode());
+ }
+ return stringBuilder.toString();
+ }
+}
diff --git a/src/main/java/com/durant/controller/LoginController.java b/src/main/java/com/durant/controller/LoginController.java
index 819f057..41fef4f 100644
--- a/src/main/java/com/durant/controller/LoginController.java
+++ b/src/main/java/com/durant/controller/LoginController.java
@@ -1,13 +1,11 @@
package com.durant.controller;
import com.durant.Result;
+import com.durant.annotion.Independent;
import com.durant.dto.request.LoginReq;
import com.durant.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
/**
* @author 冯凯
@@ -16,16 +14,18 @@ import org.springframework.web.bind.annotation.RestController;
* @date 2023/10/3 14:08
*/
@RestController
+@CrossOrigin(origins = "http://localhost:9528")
public class LoginController {
@Autowired
private LoginService loginService;
+ @Independent
@PostMapping("/user/login")
public Result userLogin(@RequestBody LoginReq loginReq){
Result loginReqResult = loginService.userLogin(loginReq);
- if (loginReqResult!=null){
- return Result.success(loginReq);
+ if (loginReqResult.getData()!=null){
+ return Result.success(loginReqResult.getData());
}
return Result.error();