diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java index 82a14d998c21afa63f115f5483188de2f8591914..a130fd241f53803ff53ff12ddc3d01158ab2e678 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -521,7 +521,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler return; } - if (StompCommand.CONNECT.equals(command)) { + if (StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command)) { if (logger.isDebugEnabled()) { logger.debug(stompAccessor.getShortLogMessage(EMPTY_PAYLOAD)); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java index b43160f113e5e520006174e6a8dcf2cb7b67968b..4833ed7f5fe482235e9c362883554409eb3d5e22 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -138,7 +138,8 @@ public class StompEncoder { return; } - boolean shouldEscape = (command != StompCommand.CONNECT && command != StompCommand.CONNECTED); + boolean shouldEscape = (command != StompCommand.CONNECT && command != StompCommand.STOMP + && command != StompCommand.CONNECTED); for (Entry> entry : nativeHeaders.entrySet()) { if (command.requiresContentLength() && "content-length".equals(entry.getKey())) { @@ -146,7 +147,7 @@ public class StompEncoder { } List values = entry.getValue(); - if (StompCommand.CONNECT.equals(command) && + if ((StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command)) && StompHeaderAccessor.STOMP_PASSCODE_HEADER.equals(entry.getKey())) { values = Collections.singletonList(StompHeaderAccessor.getPasscode(headers)); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java index f5a71b97024581fb1dfe0d75e89bf3d65bf83c4c..df39889901cd29f93eaf63ccc64609e30fb45665 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -160,7 +160,7 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { super.setSubscriptionId(value); } } - else if (StompCommand.CONNECT.equals(command)) { + else if (StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command)) { protectPasscode(); } } @@ -425,6 +425,10 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { Principal user = getUser(); return "CONNECT" + (user != null ? " user=" + user.getName() : "") + appendSession(); } + else if (StompCommand.STOMP.equals(command)) { + Principal user = getUser(); + return "STOMP" + (user != null ? " user=" + user.getName() : "") + appendSession(); + } else if (StompCommand.CONNECTED.equals(command)) { return "CONNECTED heart-beat=" + Arrays.toString(getHeartbeat()) + appendSession(); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompHeaderAccessorTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompHeaderAccessorTests.java index 50ca1bbd3071f0bc337a0418a30a3de3fa6c7404..68f8a5c43c6abb01f5ccdbaa7b4354da0b02b137 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompHeaderAccessorTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompHeaderAccessorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -102,9 +102,9 @@ public class StompHeaderAccessorTests { extHeaders.add(StompHeaderAccessor.STOMP_LOGIN_HEADER, "joe"); extHeaders.add(StompHeaderAccessor.STOMP_PASSCODE_HEADER, "joe123"); - StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.CONNECT, extHeaders); + StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.STOMP, extHeaders); - assertEquals(StompCommand.CONNECT, headerAccessor.getCommand()); + assertEquals(StompCommand.STOMP, headerAccessor.getCommand()); assertEquals(SimpMessageType.CONNECT, headerAccessor.getMessageType()); assertNotNull(headerAccessor.getHeader("stompCredentials")); assertEquals("joe", headerAccessor.getLogin()); 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 35c6a030406fb718dc72ee2ae7fa42d074758f29..cfdfbd760614d209e857ad2b424458f44ae671d4 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -271,7 +271,7 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE } StompCommand command = headerAccessor.getCommand(); - boolean isConnect = StompCommand.CONNECT.equals(command); + boolean isConnect = StompCommand.CONNECT.equals(command) || StompCommand.STOMP.equals(command); if (isConnect) { this.stats.incrementConnectCount(); } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java index e5bb34fb54b7b275c82b92c4d1df92e1209d5976..e93a8f1473a3ee52dd3739ed209e284145e53aa8 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -289,7 +289,7 @@ public class StompSubProtocolHandlerTests { @Test public void handleMessageFromClient() { - TextMessage textMessage = StompTextMessageBuilder.create(StompCommand.CONNECT).headers( + TextMessage textMessage = StompTextMessageBuilder.create(StompCommand.STOMP).headers( "login:guest", "passcode:guest", "accept-version:1.1,1.0", "heart-beat:10000,10000").build(); this.protocolHandler.afterSessionStarted(this.session, this.channel); @@ -307,7 +307,7 @@ public class StompSubProtocolHandlerTests { assertArrayEquals(new long[] {10000, 10000}, SimpMessageHeaderAccessor.getHeartbeat(actual.getHeaders())); StompHeaderAccessor stompAccessor = StompHeaderAccessor.wrap(actual); - assertEquals(StompCommand.CONNECT, stompAccessor.getCommand()); + assertEquals(StompCommand.STOMP, stompAccessor.getCommand()); assertEquals("guest", stompAccessor.getLogin()); assertEquals("guest", stompAccessor.getPasscode()); assertArrayEquals(new long[] {10000, 10000}, stompAccessor.getHeartbeat());