diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java index e9f0a606f2..a10787d99b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java @@ -189,7 +189,7 @@ public class RabbitProperties { private List
parseAddresses(String addresses) { List parsedAddresses = new ArrayList<>(); for (String address : StringUtils.commaDelimitedListToStringArray(addresses)) { - parsedAddresses.add(new Address(address)); + parsedAddresses.add(new Address(address, getSsl().isEnabled())); } return parsedAddresses; } @@ -390,7 +390,7 @@ public class RabbitProperties { return isEnabled(); } Address address = RabbitProperties.this.parsedAddresses.get(0); - return address.secureConnection; + return address.determineSslEnabled(isEnabled()); } public void setEnabled(boolean enabled) { @@ -989,14 +989,14 @@ public class RabbitProperties { private String virtualHost; - private boolean secureConnection; + private Boolean secureConnection; - private Address(String input) { + private Address(String input, boolean sslEnabled) { input = input.trim(); input = trimPrefix(input); input = parseUsernameAndPassword(input); input = parseVirtualHost(input); - parseHostAndPort(input); + parseHostAndPort(input, sslEnabled); } private String trimPrefix(String input) { @@ -1005,7 +1005,8 @@ public class RabbitProperties { return input.substring(PREFIX_AMQP_SECURE.length()); } if (input.startsWith(PREFIX_AMQP)) { - input = input.substring(PREFIX_AMQP.length()); + this.secureConnection = false; + return input.substring(PREFIX_AMQP.length()); } return input; } @@ -1036,11 +1037,11 @@ public class RabbitProperties { return input; } - private void parseHostAndPort(String input) { + private void parseHostAndPort(String input, boolean sslEnabled) { int portIndex = input.indexOf(':'); if (portIndex == -1) { this.host = input; - this.port = (this.secureConnection) ? DEFAULT_PORT_SECURE : DEFAULT_PORT; + this.port = (determineSslEnabled(sslEnabled)) ? DEFAULT_PORT_SECURE : DEFAULT_PORT; } else { this.host = input.substring(0, portIndex); @@ -1048,6 +1049,10 @@ public class RabbitProperties { } } + private boolean determineSslEnabled(boolean sslEnabled) { + return (this.secureConnection != null) ? this.secureConnection : sslEnabled; + } + } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java index 3a852a4b3a..ac84b9ff60 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java @@ -102,6 +102,14 @@ class RabbitPropertiesTests { assertThat(this.properties.determinePort()).isEqualTo(5671); } + @Test + void determinePortReturnsDefaultAmqpsPortWhenFirstAddressHasNoExplicitPortButSslEnabled() { + this.properties.getSsl().setEnabled(true); + this.properties.setPort(1234); + this.properties.setAddresses("rabbit1.example.com,rabbit2.example.com:2345"); + assertThat(this.properties.determinePort()).isEqualTo(5671); + } + @Test void virtualHostDefaultsToNull() { assertThat(this.properties.getVirtualHost()).isNull(); @@ -241,6 +249,20 @@ class RabbitPropertiesTests { assertThat(this.properties.getSsl().determineEnabled()).isTrue(); } + @Test + void sslDetermineEnabledIsTrueWhenAddressHasNoProtocolAndSslIsEnabled() { + this.properties.getSsl().setEnabled(true); + this.properties.setAddresses("root:password@otherhost"); + assertThat(this.properties.getSsl().determineEnabled()).isTrue(); + } + + @Test + void sslDetermineEnabledIsFalseWhenAddressHasNoProtocolAndSslIsDisabled() { + this.properties.getSsl().setEnabled(false); + this.properties.setAddresses("root:password@otherhost"); + assertThat(this.properties.getSsl().determineEnabled()).isFalse(); + } + @Test void determineSslUsingAmqpReturnsStateOfFirstAddress() { this.properties.setAddresses("amqp://root:password@otherhost,amqps://root:password2@otherhost2");