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