手机网站整站模板下载/郑州网站优化seo
最近负责一个后台框架的搭建,使用的是springboot redis jwt 一直哐哐写,没有想到表单重复提交的问题,晚上想结构的时候突然想起来。
上代码,
引入依赖;
使用aop做拦截
<!-- SpringBoot 拦截器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- SpringBoot 集成redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
自定义注解
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatSubmit {
}
编写拦截
@Aspect
@Component
public class NoRepeatSubmitAop {private static final Logger logger = LoggerFactory.getLogger(NoRepeatSubmitAop.class);@Autowiredprivate RedisUtil redisUtil;// 这个看自己的包结构 不然不做拦截@Around("execution(* com.jianfan.mdt.backend.project..*Controller.*(..))&& @annotation(nos)") public Object arround(ProceedingJoinPoint pjp, RepeatSubmit nos) { //RepeatSubmit自己的写注解的名字try {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();String sessionId = RequestContextHolder.getRequestAttributes().getSessionId();HttpServletRequest request = attributes.getRequest();String key = sessionId + "-" + request.getServletPath();if(redisUtil.get(key)==null){Object o = pjp.proceed();redisUtil.set(key,key,5);//设置5秒内不能重复提交return o;} else {logger.error("重复提交");return BaseResult.build(StatusCode.SERVICEERROR,StatusCode.REPAATMSG);}} catch (Throwable throwable) {logger.error("验证重复提交时出现未知异常!");return BaseResult.build(StatusCode.SERVICEERROR,StatusCode.REPAATMSGEXCEPT);}}}
注解使用
测试结果
点赞加关注;免费分享众多开源项目;