From d2ec876f572958f309231924cc364ff9d675b9e0 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 3 Jun 2019 16:22:43 -0400 Subject: [PATCH] Consistently close connection after ERROR frame Closes gh-23039 --- .../web/socket/messaging/StompSubProtocolHandler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java index cfdfbd76061..0c1be831015 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java @@ -329,12 +329,10 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE sendErrorMessage(session, ex); return; } - Message message = getErrorHandler().handleClientMessageProcessingError(clientMessage, ex); if (message == null) { return; } - StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); Assert.state(accessor != null, "No StompHeaderAccessor"); sendToClient(session, accessor, message.getPayload()); @@ -357,6 +355,14 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE // Could be part of normal workflow (e.g. browser tab closed) logger.debug("Failed to send STOMP ERROR to client", ex); } + finally { + try { + session.close(CloseStatus.PROTOCOL_ERROR); + } + catch (IOException ex) { + // Ignore + } + } } private boolean detectImmutableMessageInterceptor(MessageChannel channel) {