From 2210236f82ac0a90aca4613dac9834374afb6515 Mon Sep 17 00:00:00 2001 From: cbono Date: Sun, 24 Nov 2019 19:45:03 -0600 Subject: [PATCH] Use ssl.enabled flag when RabbitMQ address has no protocol See gh-19109 --- .../autoconfigure/amqp/RabbitProperties.java | 13 +++++---- .../amqp/RabbitPropertiesTests.java | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) 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 349311597e..f770907f51 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 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; } @@ -968,21 +968,24 @@ public class RabbitProperties { private boolean secureConnection; - private Address(String input) { + private Address(String input, boolean sslEnabled) { input = input.trim(); - input = trimPrefix(input); + input = trimPrefix(input, sslEnabled); input = parseUsernameAndPassword(input); input = parseVirtualHost(input); parseHostAndPort(input); } - private String trimPrefix(String input) { + private String trimPrefix(String input, boolean sslEnabled) { if (input.startsWith(PREFIX_AMQP_SECURE)) { this.secureConnection = true; return input.substring(PREFIX_AMQP_SECURE.length()); } if (input.startsWith(PREFIX_AMQP)) { - input = input.substring(PREFIX_AMQP.length()); + return input.substring(PREFIX_AMQP.length()); + } + if (sslEnabled) { + this.secureConnection = true; } return input; } 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 917c09847d..998a9488f3 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,21 @@ public class RabbitPropertiesTests { assertThat(this.properties.determinePort()).isEqualTo(5671); } + @Test + public void determinePortReturnsDefaultAmqpsPortWhenFirstAddressHasNoExplicitPort() { + this.properties.setPort(1234); + this.properties.setAddresses("rabbit1.example.com,rabbit2.example.com:2345"); + assertThat(this.properties.determinePort()).isEqualTo(5672); + } + + @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 +255,20 @@ public class RabbitPropertiesTests { assertThat(this.properties.getSsl().determineEnabled()).isTrue(); } + @Test + public void determineSslUsingAddressWithoutAmpqsDefersToSslFlagProperty() { + this.properties.getSsl().setEnabled(true); + this.properties.setAddresses("root:password@otherhost"); + assertThat(this.properties.getSsl().determineEnabled()).isTrue(); + } + + @Test + public void determineSslUsingAddressWithoutAmpqDefersToSslFlagProperty() { + 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");