From bcd2b9a8a7d4e0b8b6615787122d5f2a2d3eb70c Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 5 Nov 2020 21:50:12 +0000 Subject: [PATCH] Further refine logging in StompErrorHandler In 5.3.x and forward, completely avoid logging unsent CONNECT messages that are most likely authentication issues before the session is even established. Closes gh-26026 --- .../messaging/StompSubProtocolHandler.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 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 3fc930c10d..08991986c8 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 @@ -269,13 +269,15 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE } for (Message message : messages) { - try { - StompHeaderAccessor headerAccessor = - MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); - Assert.state(headerAccessor != null, "No StompHeaderAccessor"); + StompHeaderAccessor headerAccessor = + MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); + Assert.state(headerAccessor != null, "No StompHeaderAccessor"); - StompCommand command = headerAccessor.getCommand(); - boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command); + StompCommand command = headerAccessor.getCommand(); + boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command); + + boolean sent = false; + try { headerAccessor.setSessionId(session.getId()); headerAccessor.setSessionAttributes(session.getAttributes()); @@ -305,7 +307,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE try { SimpAttributesContextHolder.setAttributesFromMessage(message); - boolean sent = outputChannel.send(message); + sent = outputChannel.send(message); if (sent) { if (this.eventPublisher != null) { @@ -327,13 +329,14 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE } } catch (Throwable ex) { - if (logger.isErrorEnabled()) { - String errorText = "Failed to send message to MessageChannel in session " + session.getId(); - if (logger.isDebugEnabled()) { - logger.debug(errorText, ex); - } - else { - logger.error(errorText + ":" + ex.getMessage()); + if (logger.isDebugEnabled()) { + logger.debug("Failed to send message to MessageChannel in session " + session.getId(), ex); + } + else if (logger.isErrorEnabled()) { + // Skip unsent CONNECT messages (likely auth issues) + if (!isConnect || sent) { + logger.error("Failed to send message to MessageChannel in session " + session.getId() + + ":" + ex.getMessage()); } } handleError(session, ex, message);