You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ga...@apache.org on 2020/02/13 03:13:16 UTC

[activemq-artemis] branch master updated: ARTEMIS-2619 allow disabling STOMP 'server' header

This is an automated email from the ASF dual-hosted git repository.

gaohoward pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new daae7e7  ARTEMIS-2619 allow disabling STOMP 'server' header
     new 05b9bf6  This closes #2980
daae7e7 is described below

commit daae7e750a86f4e8f31f88e63766eb965131cef7
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Mon Feb 10 09:50:34 2020 -0600

    ARTEMIS-2619 allow disabling STOMP 'server' header
---
 .../remoting/impl/netty/TransportConstants.java    |  3 +++
 .../protocol/stomp/v11/StompFrameHandlerV11.java   |  5 +++-
 .../tests/integration/stomp/StompTestBase.java     | 17 ++++---------
 .../tests/integration/stomp/v11/StompV11Test.java  | 28 ++++++++++++++++++++++
 4 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
index d9d2d12..eb2472f 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
@@ -290,6 +290,8 @@ public class TransportConstants {
 
    public static final String QUIET_PERIOD = "quietPeriod";
 
+   public static final String DISABLE_STOMP_SERVER_HEADER = "disableStompServerHeader";
+
    /** We let this to be defined as a System Variable, as we need a different timeout over our testsuite.
     *  When running on a real server, this is the default we want.
     *  When running on a test suite, we need it to be 0, You should see a property on the main pom.xml.
@@ -371,6 +373,7 @@ public class TransportConstants {
       allowableAcceptorKeys.add(TransportConstants.TRUST_MANAGER_FACTORY_PLUGIN_PROP_NAME);
       allowableAcceptorKeys.add(TransportConstants.SHUTDOWN_TIMEOUT);
       allowableAcceptorKeys.add(TransportConstants.QUIET_PERIOD);
+      allowableAcceptorKeys.add(TransportConstants.DISABLE_STOMP_SERVER_HEADER);
 
       ALLOWABLE_ACCEPTOR_KEYS = Collections.unmodifiableSet(allowableAcceptorKeys);
 
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/v11/StompFrameHandlerV11.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/v11/StompFrameHandlerV11.java
index 9d3f912..76d9db6 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/v11/StompFrameHandlerV11.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/v11/StompFrameHandlerV11.java
@@ -85,7 +85,10 @@ public class StompFrameHandlerV11 extends VersionedStompFrameHandler implements
          response.addHeader(Stomp.Headers.Connected.SESSION, connection.getID().toString());
 
          // server
-         response.addHeader(Stomp.Headers.Connected.SERVER, connection.getActiveMQServerName());
+         Object disableServerHeader = connection.getAcceptorUsed().getConfiguration().get(TransportConstants.DISABLE_STOMP_SERVER_HEADER);
+         if (disableServerHeader == null || !Boolean.parseBoolean(disableServerHeader.toString())) {
+            response.addHeader(Stomp.Headers.Connected.SERVER, connection.getActiveMQServerName());
+         }
 
          if (requestID != null) {
             response.addHeader(Stomp.Headers.Connected.RESPONSE_ID, requestID);
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTestBase.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTestBase.java
index bed4bd1..0194f94 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTestBase.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTestBase.java
@@ -31,10 +31,8 @@ import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 import org.apache.activemq.artemis.api.core.RoutingType;
@@ -42,12 +40,9 @@ import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
 import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
-import org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolManagerFactory;
 import org.apache.activemq.artemis.core.protocol.stomp.Stomp;
-import org.apache.activemq.artemis.core.protocol.stomp.StompProtocolManagerFactory;
 import org.apache.activemq.artemis.core.remoting.impl.invm.InVMAcceptorFactory;
 import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory;
-import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
 import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
@@ -176,21 +171,17 @@ public abstract class StompTestBase extends ActiveMQTestBase {
     * @throws Exception
     */
    protected ActiveMQServer createServer() throws Exception {
-      Map<String, Object> params = new HashMap<>();
-      params.put(TransportConstants.PROTOCOLS_PROP_NAME, StompProtocolManagerFactory.STOMP_PROTOCOL_NAME + ","  + MQTTProtocolManagerFactory.MQTT_PROTOCOL_NAME);
-      params.put(TransportConstants.PORT_PROP_NAME, TransportConstants.DEFAULT_STOMP_PORT);
-      params.put(TransportConstants.STOMP_CONSUMERS_CREDIT, "-1");
+      String stompAcceptorURI = "tcp://" + TransportConstants.DEFAULT_HOST + ":" + TransportConstants.DEFAULT_STOMP_PORT + "?" + TransportConstants.STOMP_CONSUMERS_CREDIT + "=-1";
       if (isEnableStompMessageId()) {
-         params.put(TransportConstants.STOMP_ENABLE_MESSAGE_ID, true);
+         stompAcceptorURI += ";" + TransportConstants.STOMP_ENABLE_MESSAGE_ID + "=true";
       }
       if (getStompMinLargeMessageSize() != null) {
-         params.put(TransportConstants.STOMP_MIN_LARGE_MESSAGE_SIZE, 2048);
+         stompAcceptorURI += ";" + TransportConstants.STOMP_MIN_LARGE_MESSAGE_SIZE + "=2048";
       }
-      TransportConfiguration stompTransport = new TransportConfiguration(NettyAcceptorFactory.class.getName(), params);
 
       Configuration config = createBasicConfig().setSecurityEnabled(isSecurityEnabled())
                                                 .setPersistenceEnabled(isPersistenceEnabled())
-                                                .addAcceptorConfiguration(stompTransport)
+                                                .addAcceptorConfiguration("stomp", stompAcceptorURI)
                                                 .addAcceptorConfiguration(new TransportConfiguration(InVMAcceptorFactory.class.getName()))
                                                 .setConnectionTtlCheckInterval(500)
                                                 .addQueueConfiguration(new CoreQueueConfiguration().setAddress(getQueueName()).setName(getQueueName()).setRoutingType(RoutingType.ANYCAST))
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/v11/StompV11Test.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/v11/StompV11Test.java
index 78134f0..5605f0a 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/v11/StompV11Test.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/v11/StompV11Test.java
@@ -38,6 +38,7 @@ import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.protocol.stomp.Stomp;
 import org.apache.activemq.artemis.core.protocol.stomp.StompConnection;
 import org.apache.activemq.artemis.core.protocol.stomp.v11.StompFrameHandlerV11;
+import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.artemis.core.server.Queue;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger;
@@ -238,6 +239,33 @@ public class StompV11Test extends StompTestBase {
    }
 
    @Test
+   public void testServerFrame() throws Exception {
+      { // the default case
+         ClientStompFrame frame = conn.connect(defUser, defPass);
+         conn.disconnect();
+         assertTrue(frame.getHeader(Stomp.Headers.Connected.SERVER) != null);
+         server.getRemotingService().destroyAcceptor("stomp");
+      }
+
+      { // explicitly set disableStompServerHeader=false
+         server.getRemotingService().createAcceptor("stomp", "tcp://" + TransportConstants.DEFAULT_HOST + ":" + TransportConstants.DEFAULT_STOMP_PORT + "?" + TransportConstants.DISABLE_STOMP_SERVER_HEADER + "=false").start();
+         conn = StompClientConnectionFactory.createClientConnection(uri);
+         ClientStompFrame frame = conn.connect(defUser, defPass);
+         conn.disconnect();
+         assertTrue(frame.getHeader(Stomp.Headers.Connected.SERVER) != null);
+         server.getRemotingService().destroyAcceptor("stomp");
+      }
+
+      { // explicitly set disableStompServerHeader=true
+         server.getRemotingService().createAcceptor("stomp", "tcp://" + TransportConstants.DEFAULT_HOST + ":" + TransportConstants.DEFAULT_STOMP_PORT + "?" + TransportConstants.DISABLE_STOMP_SERVER_HEADER + "=true").start();
+         conn = StompClientConnectionFactory.createClientConnection(uri);
+         ClientStompFrame frame = conn.connect(defUser, defPass);
+         conn.disconnect();
+         assertTrue(frame.getHeader(Stomp.Headers.Connected.SERVER) == null);
+      }
+   }
+
+   @Test
    public void testSendAndReceive() throws Exception {
       conn.connect(defUser, defPass);