content: 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.ruoyi.common.json.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.marshal(ajaxResult));
                      return false;
                  }
              }
              return true;
          }
          else
          {
              return true;
          }
      }
  
      /**
       * 验证是否重复提交由子类实现具体的防重复提交的规则
       *
       * @param request 请求对象
       * @param annotation 防复注解
       * @return 结果
       */
      public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) throws Exception;
  }
  