|
@@ -4,6 +4,7 @@ import cn.iocoder.dashboard.common.exception.GlobalException;
|
|
|
import cn.iocoder.dashboard.common.exception.ServiceException;
|
|
|
import cn.iocoder.dashboard.common.pojo.CommonResult;
|
|
|
import cn.iocoder.dashboard.framework.security.core.util.SecurityUtils;
|
|
|
+import io.github.resilience4j.ratelimiter.RequestNotPermitted;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.security.access.AccessDeniedException;
|
|
|
import org.springframework.validation.BindException;
|
|
@@ -63,6 +64,9 @@ public class GlobalExceptionHandler {
|
|
|
if (ex instanceof HttpRequestMethodNotSupportedException) {
|
|
|
return httpRequestMethodNotSupportedExceptionHandler((HttpRequestMethodNotSupportedException) ex);
|
|
|
}
|
|
|
+ if (ex instanceof RequestNotPermitted) {
|
|
|
+ return requestNotPermittedExceptionHandler(request, (RequestNotPermitted) ex);
|
|
|
+ }
|
|
|
if (ex instanceof ServiceException) {
|
|
|
return serviceExceptionHandler((ServiceException) ex);
|
|
|
}
|
|
@@ -163,6 +167,15 @@ public class GlobalExceptionHandler {
|
|
|
return CommonResult.error(METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage()));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理 Resilience4j 限流抛出的异常
|
|
|
+ */
|
|
|
+ @ExceptionHandler(value = RequestNotPermitted.class)
|
|
|
+ public CommonResult<?> requestNotPermittedExceptionHandler(HttpServletRequest req, RequestNotPermitted ex) {
|
|
|
+ log.warn("[requestNotPermittedExceptionHandler][url({}) 访问过于频繁]", req.getRequestURL(), ex);
|
|
|
+ return CommonResult.error(TOO_MANY_REQUESTS);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 处理 Spring Security 权限不足的异常
|
|
|
*
|