欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot防止表单重复提交

程序员文章站 2022-07-02 23:42:20
...

最近负责一个后台框架的搭建,使用的是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);

    @Autowired
    private 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);
        }

    }

}

注解使用
springboot防止表单重复提交
测试结果
springboot防止表单重复提交
点赞加关注;免费分享众多开源项目;

相关标签: SpringBoot