Support IPv6 addresses in spring.rabbitmq.addresses

Refine parsing logic in `RabbitProperties` so that IPv6 addresses can
be used.

Fixes gh-28133
2.4.x
Phillip Webb 3 years ago
parent 5957dfeea4
commit 01a39aaf6a

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -1083,7 +1083,7 @@ public class RabbitProperties {
} }
private void parseHostAndPort(String input, boolean sslEnabled) { private void parseHostAndPort(String input, boolean sslEnabled) {
int portIndex = input.indexOf(':'); int portIndex = input.lastIndexOf(':');
if (portIndex == -1) { if (portIndex == -1) {
this.host = input; this.host = input;
this.port = (determineSslEnabled(sslEnabled)) ? DEFAULT_PORT_SECURE : DEFAULT_PORT; this.port = (determineSslEnabled(sslEnabled)) ? DEFAULT_PORT_SECURE : DEFAULT_PORT;

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -240,6 +240,13 @@ class RabbitPropertiesTests {
.isEqualTo("user:secret@rabbit1.example.com:1234/alpha,rabbit2.example.com"); .isEqualTo("user:secret@rabbit1.example.com:1234/alpha,rabbit2.example.com");
} }
@Test
void ipv6Address() {
this.properties.setAddresses("amqp://foo:bar@[aaaa:bbbb:cccc::d]:5672");
assertThat(this.properties.determineHost()).isEqualTo("[aaaa:bbbb:cccc::d]");
assertThat(this.properties.determinePort()).isEqualTo(5672);
}
@Test @Test
void determineAddressesReturnsAddressesWithJustHostAndPort() { void determineAddressesReturnsAddressesWithJustHostAndPort() {
this.properties.setAddresses("user:secret@rabbit1.example.com:1234/alpha,rabbit2.example.com"); this.properties.setAddresses("user:secret@rabbit1.example.com:1234/alpha,rabbit2.example.com");

Loading…
Cancel
Save