[
https://issues.apache.org/jira/browse/ARTEMIS-1921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17837405#comment-17837405
]
Justin Bertram commented on ARTEMIS-1921:
-----------------------------------------
[~johan1], upon closer inspection I can't get your attached code to work with
Qpid JMS. The client ID is *not* available during authentication. Here's the
test I'm running:
{code:java}
import javax.jms.Connection;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
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.CheckType;
import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager3;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Artemis1921 extends ActiveMQTestBase {
private EmbeddedActiveMQ broker;
@Before
public void setup() throws Exception {
broker = new EmbeddedActiveMQ();
broker.setSecurityManager(new ActiveMQSecurityManager3() {
@Override
public boolean validateUserAndRole(final String user, final String
password, final Set<Role> roles, final CheckType checkType) {
return validateUser(user, password);
}
@Override
public boolean validateUser(final String user, final String password) {
return "foo".equals(user) && "bar".equals(password);
}
@Override
public String validateUserAndRole(final String user, final String
password, final Set<Role> roles, final CheckType checkType, final String
address,
final RemotingConnection
remotingConnection) {
return validateUser(user, password, remotingConnection);
}
@Override
public String validateUser(final String user, final String password,
final RemotingConnection remotingConnection) {
final String clientID = remotingConnection.getClientID();
if (clientID == null) {
System.err.println("*****************************************");
System.err.println("* No clientID set!");
System.err.println("*****************************************");
return null;
}
return validateUser(user, password) ? user : null;
}
});
final TransportConfiguration transportCfg = new
TransportConfiguration(NettyAcceptorFactory.class.getName());
transportCfg.getParams().put(TransportConstants.PROTOCOLS_PROP_NAME,
"CORE,AMQP");
transportCfg.getParams().put(TransportConstants.HOST_PROP_NAME,
"0.0.0.0");
transportCfg.getParams().put(TransportConstants.PORT_PROP_NAME, "61616");
broker.setConfiguration(new ConfigurationImpl()
.setPersistenceEnabled(false)
.setSecurityEnabled(true)
.setAcceptorConfigurations(new
HashSet<>(Arrays.asList(transportCfg)))
);
broker.start();
}
@After
public void tearDown() throws Exception {
broker.stop();
}
@Test
public void testJMSConnect() throws Exception {
final JmsConnectionFactory jmsCF = new
JmsConnectionFactory("amqp://localhost:61616");
jmsCF.setUsername("foo");
jmsCF.setPassword("bar");
jmsCF.setClientID("foo_001"); // trying to set clientID on CF
final Connection jmsConn = jmsCF.createConnection();
jmsConn.setClientID("foo_001"); // trying to set clientID on connection
jmsConn.start();
jmsConn.close();
}
}{code}
This code doesn't work for any of the supported JMS clients (i.e. Core JMS,
Qpid JMS, and OpenWire JMS).
> Setting client ID on core JMS should be reflected in broker RemotingConnection
> ------------------------------------------------------------------------------
>
> Key: ARTEMIS-1921
> URL: https://issues.apache.org/jira/browse/ARTEMIS-1921
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker
> Affects Versions: 2.6.1
> Reporter: Johan Stenberg
> Priority: Major
> Attachments: Artemis1921_CoreJmsClient_SetClientId_Test.java
>
>
> As opposite to Qpid JMS Client over AMPQ1.0 or FuseSource StompJMS client
> over STOMP, a clientID set on the JMS ConnectionFactory or the Connection in
> the Artemis JMS Client is not available on the broker via
> RemotingConnection#getClientID().
--
This message was sent by Atlassian Jira
(v8.20.10#820010)