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("系统繁忙"); |
| | | } |
| | | } |