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 349311597e25..3c42f132a41b 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 @@ -188,7 +188,7 @@ public void setAddresses(String addresses) { 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; } @@ -378,7 +378,7 @@ public boolean determineEnabled() { return isEnabled(); } Address address = RabbitProperties.this.parsedAddresses.get(0); - return address.secureConnection; + return address.determineSslEnabled(isEnabled()); } public void setEnabled(boolean enabled) { @@ -966,14 +966,14 @@ private static final class Address { 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) { @@ -982,7 +982,8 @@ private String trimPrefix(String input) { 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; } @@ -1013,11 +1014,11 @@ private String parseVirtualHost(String input) { 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); @@ -1025,6 +1026,10 @@ private void parseHostAndPort(String input) { } } + 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 917c09847dfe..efe56f29f810 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 @@ -101,6 +101,14 @@ public void determinePortUsingAmqpsReturnsPortOfFirstAddress() { assertThat(this.properties.determinePort()).isEqualTo(5671); } + @Test + public 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 public void virtualHostDefaultsToNull() { assertThat(this.properties.getVirtualHost()).isNull(); @@ -240,6 +248,20 @@ public void determineSslUsingAmqpsReturnsStateOfFirstAddress() { assertThat(this.properties.getSsl().determineEnabled()).isTrue(); } + @Test + public void sslDetermineEnabledIsTrueWhenAddressHasNoProtocolAndSslIsEnabled() { + this.properties.getSsl().setEnabled(true); + this.properties.setAddresses("root:password@otherhost"); + assertThat(this.properties.getSsl().determineEnabled()).isTrue(); + } + + @Test + public void sslDetermineEnabledIsFalseWhenAddressHasNoProtocolAndSslIsDisabled() { + this.properties.getSsl().setEnabled(false); + this.properties.setAddresses("root:password@otherhost"); + assertThat(this.properties.getSsl().determineEnabled()).isFalse(); + } + @Test public void determineSslUsingAmqpReturnsStateOfFirstAddress() { this.properties.setAddresses("amqp://root:password@otherhost,amqps://root:password2@otherhost2");