Add secured connection support to Artemis

This commit aligns the feature introduced in gh-6071 to Artemis.

Closes gh-6179
pull/6176/merge
Stephane Nicoll 9 years ago
parent 731d326799
commit a273d8d0c8

@ -31,6 +31,7 @@ import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/** /**
* Factory to create an Artemis {@link ActiveMQConnectionFactory} instance from properties * Factory to create an Artemis {@link ActiveMQConnectionFactory} instance from properties
@ -130,8 +131,14 @@ class ArtemisConnectionFactoryFactory {
NettyConnectorFactory.class.getName(), params); NettyConnectorFactory.class.getName(), params);
Constructor<T> constructor = factoryClass.getConstructor(boolean.class, Constructor<T> constructor = factoryClass.getConstructor(boolean.class,
TransportConfiguration[].class); TransportConfiguration[].class);
return constructor.newInstance(false, T connectionFactory = constructor.newInstance(false,
new TransportConfiguration[] { transportConfiguration }); new TransportConfiguration[] {transportConfiguration});
String user = this.properties.getUser();
if (StringUtils.hasText(user)) {
connectionFactory.setUser(user);
connectionFactory.setPassword(this.properties.getPassword());
}
return connectionFactory;
} }
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2015 the original author or authors. * Copyright 2012-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -51,6 +51,16 @@ public class ArtemisProperties {
*/ */
private int port = 61616; private int port = 61616;
/**
* Login user of the broker.
*/
private String user;
/**
* Login password of the broker.
*/
private String password;
private final Embedded embedded = new Embedded(); private final Embedded embedded = new Embedded();
public ArtemisMode getMode() { public ArtemisMode getMode() {
@ -77,6 +87,22 @@ public class ArtemisProperties {
this.port = port; this.port = port;
} }
public String getUser() {
return this.user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public Embedded getEmbedded() { public Embedded getEmbedded() {
return this.embedded; return this.embedded;
} }

@ -84,6 +84,8 @@ public class ArtemisAutoConfigurationTests {
.getBean(ActiveMQConnectionFactory.class); .getBean(ActiveMQConnectionFactory.class);
assertThat(connectionFactory).isEqualTo(jmsTemplate.getConnectionFactory()); assertThat(connectionFactory).isEqualTo(jmsTemplate.getConnectionFactory());
assertNettyConnectionFactory(connectionFactory, "localhost", 61616); assertNettyConnectionFactory(connectionFactory, "localhost", 61616);
assertThat(connectionFactory.getUser()).isNull();
assertThat(connectionFactory.getPassword()).isNull();
} }
@Test @Test
@ -95,6 +97,19 @@ public class ArtemisAutoConfigurationTests {
assertNettyConnectionFactory(connectionFactory, "192.168.1.144", 9876); assertNettyConnectionFactory(connectionFactory, "192.168.1.144", 9876);
} }
@Test
public void nativeConnectionFactoryCredentials() {
load(EmptyConfiguration.class, "spring.artemis.mode:native",
"spring.artemis.user:user", "spring.artemis.password:secret");
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
ActiveMQConnectionFactory connectionFactory = this.context
.getBean(ActiveMQConnectionFactory.class);
assertThat(connectionFactory).isEqualTo(jmsTemplate.getConnectionFactory());
assertNettyConnectionFactory(connectionFactory, "localhost", 61616);
assertThat(connectionFactory.getUser()).isEqualTo("user");
assertThat(connectionFactory.getPassword()).isEqualTo("secret");
}
@Test @Test
public void embeddedConnectionFactory() { public void embeddedConnectionFactory() {
load(EmptyConfiguration.class, "spring.artemis.mode:embedded"); load(EmptyConfiguration.class, "spring.artemis.mode:embedded");

@ -829,7 +829,9 @@ content into your application; rather pick only the properties that you need.
spring.artemis.embedded.topics= # Comma-separated list of topics to create on startup. spring.artemis.embedded.topics= # Comma-separated list of topics to create on startup.
spring.artemis.host=localhost # Artemis broker host. spring.artemis.host=localhost # Artemis broker host.
spring.artemis.mode= # Artemis deployment mode, auto-detected by default. Can be explicitly set to "native" or "embedded". spring.artemis.mode= # Artemis deployment mode, auto-detected by default. Can be explicitly set to "native" or "embedded".
spring.artemis.password= # Login password of the broker.
spring.artemis.port=61616 # Artemis broker port. spring.artemis.port=61616 # Artemis broker port.
spring.artemis.user= # Login user of the broker.
# SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties]) # SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties])
spring.batch.initializer.enabled=true # Create the required batch tables on startup if necessary. spring.batch.initializer.enabled=true # Create the required batch tables on startup if necessary.

Loading…
Cancel
Save