From 1aa8f4900118546a80be244e9247c6370e8684e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lagraulet?= Date: Mon, 30 May 2016 17:14:34 +0200 Subject: [PATCH] Add a secured connection factory for Hornetq. See gh-6071 --- ...HornetQConnectionFactoryConfiguration.java | 2 +- .../HornetQConnectionFactoryFactory.java | 10 ++-- .../jms/hornetq/HornetQProperties.java | 27 ++++++++++ .../HornetQSecuredConnectionFactory.java | 54 +++++++++++++++++++ ...rnetQXAConnectionFactoryConfiguration.java | 8 +-- .../HornetQXASecuredConnectionFactory.java | 54 +++++++++++++++++++ 6 files changed, 145 insertions(+), 10 deletions(-) create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQSecuredConnectionFactory.java create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXASecuredConnectionFactory.java diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryConfiguration.java index f0807e6112..f00b2d3800 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryConfiguration.java @@ -39,7 +39,7 @@ class HornetQConnectionFactoryConfiguration { public HornetQConnectionFactory jmsConnectionFactory(ListableBeanFactory beanFactory, HornetQProperties properties) { return new HornetQConnectionFactoryFactory(beanFactory, properties) - .createConnectionFactory(HornetQConnectionFactory.class); + .createConnectionFactory(HornetQSecuredConnectionFactory.class); } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryFactory.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryFactory.java index 6315f79896..c0338d5bd8 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryFactory.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQConnectionFactoryFactory.java @@ -111,8 +111,8 @@ class HornetQConnectionFactoryFactory { this.properties.getEmbedded().generateTransportParameters()); ServerLocator serviceLocator = HornetQClient .createServerLocatorWithoutHA(transportConfiguration); - return factoryClass.getConstructor(ServerLocator.class) - .newInstance(serviceLocator); + return factoryClass.getConstructor(HornetQProperties.class, ServerLocator.class) + .newInstance(this.properties, serviceLocator); } catch (NoClassDefFoundError ex) { throw new IllegalStateException("Unable to create InVM " @@ -128,9 +128,9 @@ class HornetQConnectionFactoryFactory { params.put(TransportConstants.PORT_PROP_NAME, this.properties.getPort()); TransportConfiguration transportConfiguration = new TransportConfiguration( NettyConnectorFactory.class.getName(), params); - Constructor constructor = factoryClass.getConstructor(boolean.class, - TransportConfiguration[].class); - return constructor.newInstance(false, + Constructor constructor = factoryClass.getConstructor(HornetQProperties.class, + boolean.class, TransportConfiguration[].class); + return constructor.newInstance(this.properties, false, new TransportConfiguration[] { transportConfiguration }); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQProperties.java index d35038fa73..9fc48cec72 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQProperties.java @@ -50,6 +50,16 @@ public class HornetQProperties { */ private int port = 5445; + /** + * User for a secured connection. + */ + private String user; + + /** + * Password for a secured connection. + */ + private String password; + private final Embedded embedded = new Embedded(); public HornetQMode getMode() { @@ -80,6 +90,22 @@ public class HornetQProperties { return this.embedded; } + 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; + } + /** * Configuration for an embedded HornetQ server. */ @@ -188,6 +214,7 @@ public class HornetQProperties { /** * Creates the minimal transport parameters for an embedded transport * configuration. + * * @return the transport parameters * @see TransportConstants#SERVER_ID_PROP_NAME */ diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQSecuredConnectionFactory.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQSecuredConnectionFactory.java new file mode 100644 index 0000000000..41595b9f60 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQSecuredConnectionFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.jms.hornetq; + +import javax.jms.Connection; +import javax.jms.JMSException; + +import org.hornetq.api.core.TransportConfiguration; +import org.hornetq.api.core.client.ServerLocator; +import org.hornetq.jms.client.HornetQConnectionFactory; + +/** + * Secured HornetQ implementation of a JMS ConnectionFactory. + * + * @author Stéphane Lagraulet + * + * @since 1.4.0 + * + */ +public class HornetQSecuredConnectionFactory extends HornetQConnectionFactory { + + private HornetQProperties properties; + + public HornetQSecuredConnectionFactory(HornetQProperties properties, + final ServerLocator serverLocator) { + super(serverLocator); + this.properties = properties; + } + + public HornetQSecuredConnectionFactory(HornetQProperties properties, final boolean ha, + final TransportConfiguration... initialConnectors) { + super(ha, initialConnectors); + this.properties = properties; + } + + public Connection createConnection() throws JMSException { + return createConnection(this.properties.getUser(), this.properties.getPassword()); + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXAConnectionFactoryConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXAConnectionFactoryConfiguration.java index 8842f8e5c6..6347184925 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXAConnectionFactoryConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXAConnectionFactoryConfiguration.java @@ -20,7 +20,6 @@ import javax.jms.ConnectionFactory; import javax.transaction.TransactionManager; import org.hornetq.jms.client.HornetQConnectionFactory; -import org.hornetq.jms.client.HornetQXAConnectionFactory; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -47,16 +46,17 @@ class HornetQXAConnectionFactoryConfiguration { @Bean(name = { "jmsConnectionFactory", "xaJmsConnectionFactory" }) public ConnectionFactory jmsConnectionFactory(ListableBeanFactory beanFactory, HornetQProperties properties, XAConnectionFactoryWrapper wrapper) - throws Exception { + throws Exception { return wrapper.wrapConnectionFactory( new HornetQConnectionFactoryFactory(beanFactory, properties) - .createConnectionFactory(HornetQXAConnectionFactory.class)); + .createConnectionFactory( + HornetQXASecuredConnectionFactory.class)); } @Bean public HornetQConnectionFactory nonXaJmsConnectionFactory( ListableBeanFactory beanFactory, HornetQProperties properties) { return new HornetQConnectionFactoryFactory(beanFactory, properties) - .createConnectionFactory(HornetQConnectionFactory.class); + .createConnectionFactory(HornetQSecuredConnectionFactory.class); } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXASecuredConnectionFactory.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXASecuredConnectionFactory.java new file mode 100644 index 0000000000..795e70af41 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/hornetq/HornetQXASecuredConnectionFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.jms.hornetq; + +import javax.jms.Connection; +import javax.jms.JMSException; + +import org.hornetq.api.core.TransportConfiguration; +import org.hornetq.api.core.client.ServerLocator; +import org.hornetq.jms.client.HornetQXAConnectionFactory; + +/** + * Secured HornetQ XA implementation of a JMS ConnectionFactory. + * + * @author Stéphane Lagraulet + * + * @since 1.4.0 + * + */ +public class HornetQXASecuredConnectionFactory extends HornetQXAConnectionFactory { + + private HornetQProperties properties; + + public HornetQXASecuredConnectionFactory(HornetQProperties properties, + ServerLocator serverLocator) { + super(serverLocator); + this.properties = properties; + } + + public HornetQXASecuredConnectionFactory(HornetQProperties properties, boolean ha, + TransportConfiguration... initialConnectors) { + super(ha, initialConnectors); + this.properties = properties; + } + + public Connection createConnection() throws JMSException { + return createConnection(this.properties.getUser(), this.properties.getPassword()); + } + +}