You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.8 KiB
55 lines
1.8 KiB
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.fastjson.JSONObject; |
|
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, JSONObject.toJSONString(ajaxResult)); |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
else |
|
{ |
|
return true; |
|
} |
|
} |
|
|
|
/** |
|
* 验证是否重复提交由子类实现具体的防重复提交的规则 |
|
* |
|
* @param request |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation); |
|
}
|
|
|