From 7c97d48d873db06580c790cc12a1000a6ef034f8 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 RabbitProperties specify address with no protocol. Closes gh-19102 --- .../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 349311597e25..f770907f5186 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; } @@ -968,21 +968,24 @@ private static final class Address { 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 917c09847dfe..998a9488f3ac 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 void determinePortUsingAmqpsReturnsPortOfFirstAddress() { 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 void determineSslUsingAmqpsReturnsStateOfFirstAddress() { 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");