Skip to content

Commit bcd2b9a

Browse files
committed
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
1 parent 17dd778 commit bcd2b9a

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,15 @@ else if (webSocketMessage instanceof BinaryMessage) {
269269
}
270270

271271
for (Message<byte[]> message : messages) {
272-
try {
273-
StompHeaderAccessor headerAccessor =
274-
MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
275-
Assert.state(headerAccessor != null, "No StompHeaderAccessor");
272+
StompHeaderAccessor headerAccessor =
273+
MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
274+
Assert.state(headerAccessor != null, "No StompHeaderAccessor");
275+
276+
StompCommand command = headerAccessor.getCommand();
277+
boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command);
276278

277-
StompCommand command = headerAccessor.getCommand();
278-
boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command);
279+
boolean sent = false;
280+
try {
279281

280282
headerAccessor.setSessionId(session.getId());
281283
headerAccessor.setSessionAttributes(session.getAttributes());
@@ -305,7 +307,7 @@ else if (StompCommand.DISCONNECT.equals(command)) {
305307

306308
try {
307309
SimpAttributesContextHolder.setAttributesFromMessage(message);
308-
boolean sent = outputChannel.send(message);
310+
sent = outputChannel.send(message);
309311

310312
if (sent) {
311313
if (this.eventPublisher != null) {
@@ -327,13 +329,14 @@ else if (StompCommand.UNSUBSCRIBE.equals(command)) {
327329
}
328330
}
329331
catch (Throwable ex) {
330-
if (logger.isErrorEnabled()) {
331-
String errorText = "Failed to send message to MessageChannel in session " + session.getId();
332-
if (logger.isDebugEnabled()) {
333-
logger.debug(errorText, ex);
334-
}
335-
else {
336-
logger.error(errorText + ":" + ex.getMessage());
332+
if (logger.isDebugEnabled()) {
333+
logger.debug("Failed to send message to MessageChannel in session " + session.getId(), ex);
334+
}
335+
else if (logger.isErrorEnabled()) {
336+
// Skip unsent CONNECT messages (likely auth issues)
337+
if (!isConnect || sent) {
338+
logger.error("Failed to send message to MessageChannel in session " + session.getId() +
339+
":" + ex.getMessage());
337340
}
338341
}
339342
handleError(session, ex, message);

0 commit comments

Comments
 (0)