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);