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();