| New file | 
 |  |  | 
 |  |  | package com.xcong.excoin.common.aspect; | 
 |  |  |  | 
 |  |  | import com.xcong.excoin.common.annotation.SubmitRepeat; | 
 |  |  | import com.xcong.excoin.common.entity.FebsResponse; | 
 |  |  | import com.xcong.excoin.common.exception.FebsException; | 
 |  |  | import com.xcong.excoin.common.utils.RedisUtils; | 
 |  |  | import com.xcong.excoin.system.entity.User; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.shiro.SecurityUtils; | 
 |  |  | import org.aspectj.lang.JoinPoint; | 
 |  |  | import org.aspectj.lang.ProceedingJoinPoint; | 
 |  |  | import org.aspectj.lang.annotation.*; | 
 |  |  | import org.springframework.stereotype.Component; | 
 |  |  | import org.springframework.web.context.request.RequestContextHolder; | 
 |  |  | import org.springframework.web.context.request.ServletRequestAttributes; | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import javax.servlet.http.HttpServletRequest; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author wzy | 
 |  |  |  * @date 2020-04-16 22:01 | 
 |  |  |  **/ | 
 |  |  | @Slf4j | 
 |  |  | @Aspect | 
 |  |  | @Component | 
 |  |  | public class SubmitRepeatAspect { | 
 |  |  |  | 
 |  |  |     @Resource | 
 |  |  |     private RedisUtils redisUtil; | 
 |  |  |  | 
 |  |  |     private String key; | 
 |  |  |  | 
 |  |  |     @Pointcut("@annotation(submitRepeat)") | 
 |  |  |     public void submitRepeatPointCut(SubmitRepeat submitRepeat) { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Before("submitRepeatPointCut(submitRepeat)") | 
 |  |  |     public void before(SubmitRepeat submitRepeat) { | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Around("submitRepeatPointCut(submitRepeat)") | 
 |  |  |     public Object around(ProceedingJoinPoint joinPoint, SubmitRepeat submitRepeat) throws Throwable { | 
 |  |  |         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); | 
 |  |  |         HttpServletRequest request = attributes.getRequest(); | 
 |  |  |         String uri = request.getRequestURI(); | 
 |  |  |         User user = (User) SecurityUtils.getSubject().getPrincipal(); | 
 |  |  |         key = user.getId() + "_" + uri; | 
 |  |  |         boolean flag = redisUtil.setNotExist(key, "1", 5); | 
 |  |  |         log.info("#mid : {}, flag : {}#", user.getId(), flag); | 
 |  |  |         if (flag) { | 
 |  |  |             Object result = joinPoint.proceed(); | 
 |  |  |             redisUtil.del(key); | 
 |  |  |             return result; | 
 |  |  |         } else { | 
 |  |  |             return new FebsResponse().fail().message("请勿重复点击"); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @After("submitRepeatPointCut(submitRepeat)") | 
 |  |  |     public void after(SubmitRepeat submitRepeat) { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @AfterThrowing(throwing = "ex", pointcut = "submitRepeatPointCut(submitRepeat)") | 
 |  |  |     public void afterThrows(JoinPoint jp, Exception ex, SubmitRepeat submitRepeat) throws Exception { | 
 |  |  |         log.error("#submit repeat error:#", ex); | 
 |  |  |         redisUtil.del(key); | 
 |  |  |         throw new Exception("系统繁忙"); | 
 |  |  |     } | 
 |  |  | } |