| package com.ruoyi.framework.interceptor; | 
|   | 
| import java.lang.reflect.Method; | 
| import javax.servlet.http.HttpServletRequest; | 
| import javax.servlet.http.HttpServletResponse; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.method.HandlerMethod; | 
| import org.springframework.web.servlet.HandlerInterceptor; | 
| import com.alibaba.fastjson2.JSON; | 
| import com.ruoyi.common.annotation.RepeatSubmit; | 
| import com.ruoyi.common.core.domain.AjaxResult; | 
| import com.ruoyi.common.utils.ServletUtils; | 
|   | 
| /** | 
|  * 防止重复提交拦截器 | 
|  * | 
|  * @author ruoyi | 
|  */ | 
| @Component | 
| public abstract class RepeatSubmitInterceptor implements HandlerInterceptor | 
| { | 
|     @Override | 
|     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception | 
|     { | 
|         if (handler instanceof HandlerMethod) | 
|         { | 
|             HandlerMethod handlerMethod = (HandlerMethod) handler; | 
|             Method method = handlerMethod.getMethod(); | 
|             RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); | 
|             if (annotation != null) | 
|             { | 
|                 if (this.isRepeatSubmit(request, annotation)) | 
|                 { | 
|                     AjaxResult ajaxResult = AjaxResult.error(annotation.message()); | 
|                     ServletUtils.renderString(response, JSON.toJSONString(ajaxResult)); | 
|                     return false; | 
|                 } | 
|             } | 
|             return true; | 
|         } | 
|         else | 
|         { | 
|             return true; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 验证是否重复提交由子类实现具体的防重复提交的规则 | 
|      * | 
|      * @param request | 
|      * @return | 
|      * @throws Exception | 
|      */ | 
|     public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation); | 
| } |