From 4edc7196fb172cabe454dfc0377d322678b7ea7f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 24 Sep 2019 11:09:42 +0100 Subject: [PATCH] Refine disconnected client handling in WebFlux If an error looks like a "disconnected client" but the response is not yet committed then it can't be an I/O error from writing to the server response. It is most likely as a result of a remote call as part of request handling. Not setting the response to 500 in this case results in a 200 response status despite the error. Even if it was an I/O error from the server response, setting the status won't impact a failed response. Closes gh-23319 --- .../web/server/adapter/HttpWebHandlerAdapter.java | 5 +++++ 1 file changed, 5 insertions(+) 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 56ae42aa23..8f4788adaf 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 @@ -268,6 +268,11 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa String logPrefix = exchange.getLogPrefix(); if (isDisconnectedClientError(ex)) { + // Request handling error (e.g. remote call), if we manage to set the status.. + if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { + logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); + return Mono.empty(); + } if (lostClientLogger.isTraceEnabled()) { lostClientLogger.trace(logPrefix + "Client went away", ex); }