From 088e1ba6624c7523ee2566110b2c4721a37204a5 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 09 四月 2026 14:22:09 +0800
Subject: [PATCH] #生成波次
---
rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java | 45 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 44 insertions(+), 1 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
index ac0c443..ea691e6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
@@ -12,8 +12,9 @@
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.context.request.async.AsyncRequestNotUsableException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -79,10 +80,18 @@
return R.error(out);
}
+ @ExceptionHandler(AsyncRequestNotUsableException.class)
+ public void asyncRequestNotUsableExceptionHandler(AsyncRequestNotUsableException e) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ }
@ResponseBody
@ExceptionHandler(RuntimeException.class)
public R runtimeExceptionHandler(RuntimeException e, HttpServletResponse response) {
+ if (isClientAbortException(e)) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ return null;
+ }
CommonUtil.addCrossHeaders(response);
Throwable cause = e.getCause();
if (cause instanceof CoolException) {
@@ -95,10 +104,44 @@
@ResponseBody
@ExceptionHandler(Throwable.class)
public R exceptionHandler(Throwable e, HttpServletResponse response) {
+ if (isClientAbortException(e)) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ return null;
+ }
logger.error(e.getMessage(), e);
CommonUtil.addCrossHeaders(response);
return R.error(Constants.RESULT_ERROR_MSG);
}
+ private boolean isClientAbortException(Throwable throwable) {
+ Throwable current = throwable;
+ while (current != null) {
+ String message = current.getMessage();
+ if (message != null) {
+ String normalized = message.toLowerCase();
+ if (normalized.contains("broken pipe")
+ || normalized.contains("connection reset")
+ || normalized.contains("forcibly closed")
+ || normalized.contains("abort")) {
+ return true;
+ }
+ }
+ current = current.getCause();
+ }
+ return false;
+ }
+
+ private String resolveAbortMessage(Throwable throwable) {
+ Throwable current = throwable;
+ while (current != null) {
+ String message = current.getMessage();
+ if (message != null && !message.isBlank()) {
+ return message;
+ }
+ current = current.getCause();
+ }
+ return "client aborted connection";
+ }
+
}
--
Gitblit v1.9.1