diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java index 594b4ef989de2dc84808dd3f26d4ebf99b5f6904..fafc3b71482148e9e4d1053b4e0b0eb0f5dcce1f 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java @@ -69,17 +69,9 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa private static final String DISCONNECTED_CLIENT_LOG_CATEGORY = "org.springframework.web.server.DisconnectedClient"; - /** - * Tomcat: ClientAbortException or EOFException - * Jetty: EofException - * WildFly, GlassFish: java.io.IOException "Broken pipe" (already covered) - *

TODO: - * This definition is currently duplicated between HttpWebHandlerAdapter - * and AbstractSockJsSession. It is a candidate for a common utility class. - * @see #isDisconnectedClientError(Throwable) - */ - private static final Set DISCONNECTED_CLIENT_EXCEPTIONS = - new HashSet<>(Arrays.asList("ClientAbortException", "EOFException", "EofException")); + // Similar declaration exists in AbstractSockJsSession.. + private static final Set DISCONNECTED_CLIENT_EXCEPTIONS = new HashSet<>( + Arrays.asList("AbortedException", "ClientAbortException", "EOFException", "EofException")); private static final Log logger = LogFactory.getLog(HttpWebHandlerAdapter.class); @@ -299,8 +291,11 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa private boolean isDisconnectedClientError(Throwable ex) { String message = NestedExceptionUtils.getMostSpecificCause(ex).getMessage(); - if (message != null && message.toLowerCase().contains("broken pipe")) { - return true; + if (message != null) { + String text = message.toLowerCase(); + if (text.contains("broken pipe") || text.contains("connection reset by peer")) { + return true; + } } return DISCONNECTED_CLIENT_EXCEPTIONS.contains(ex.getClass().getSimpleName()); }