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); 
 | 
} 
 |