- 注解接口
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoRepeatSubmit {
}
- 创建切面
@Aspect
@Component
public class NoRepeatSubmitAop {
@Around("execution(* com.vcfilm..*Controller.*(..)) && @annotation(nrs)")
public Object arround(ProceedingJoinPoint pjp, NoRepeatSubmit nrs) {
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String token = request.getHeader(CommonConstant.USER_AUTH_TOKEN);
String key = token + "-" + request.getServletPath();
if (RedisUtil.setNoRepeatSubmit(key)) {
return pjp.proceed();
}else {
logger.error("重复提交");
return DataResult.failed(ResultCodeEnum.FAILURE.getCode(), "您点击太频繁,请稍候...");
}
} catch (Throwable e) {
logger.error("验证重复提交时出现未知异常!", e);
return DataResult.failed(ResultCodeEnum.FAILURE.getCode(), "防重复提交验证异常");
}
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/254de48acb845593df71742d4c209a2f.png)