Skip to content

Commit 6340ee0

Browse files
committed
Use ANONYMOUS as default SASL mechanism
1 parent 64ae52d commit 6340ee0

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

ci/start-broker.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ ssl_options.fail_if_no_peer_cert = false
3333
ssl_options.depth = 1
3434
3535
auth_mechanisms.1 = PLAIN
36-
auth_mechanisms.2 = EXTERNAL" >> rabbitmq-configuration/rabbitmq.conf
36+
auth_mechanisms.2 = ANONYMOUS
37+
auth_mechanisms.3 = EXTERNAL" >> rabbitmq-configuration/rabbitmq.conf
3738

3839
echo "Running RabbitMQ ${RABBITMQ_IMAGE}"
3940

src/main/java/com/rabbitmq/client/amqp/ConnectionSettings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
public interface ConnectionSettings<T> {
2525

26+
String SASL_MECHANISM_ANONYMOUS = "ANONYMOUS";
2627
String SASL_MECHANISM_PLAIN = "PLAIN";
2728
String SASL_MECHANISM_EXTERNAL = "EXTERNAL";
2829

src/main/java/com/rabbitmq/client/amqp/impl/DefaultConnectionSettings.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.List;
3333
import java.util.Random;
3434
import java.util.concurrent.CopyOnWriteArrayList;
35+
import java.util.stream.Collectors;
3536
import javax.net.ssl.SSLContext;
3637
import javax.net.ssl.TrustManager;
3738
import org.apache.qpid.protonj2.client.ConnectionOptions;
@@ -41,6 +42,11 @@
4142
abstract class DefaultConnectionSettings<T> implements ConnectionSettings<T> {
4243

4344
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultConnectionSettings.class);
45+
private static final List<String> SASL_MECHANISMS =
46+
List.of(
47+
ConnectionSettings.SASL_MECHANISM_PLAIN,
48+
SASL_MECHANISM_ANONYMOUS,
49+
SASL_MECHANISM_EXTERNAL);
4450

4551
static final String DEFAULT_USERNAME = "guest";
4652
static final String DEFAULT_PASSWORD = DEFAULT_USERNAME;
@@ -68,7 +74,7 @@ abstract class DefaultConnectionSettings<T> implements ConnectionSettings<T> {
6874
}
6975
};
7076
private final List<Address> addresses = new CopyOnWriteArrayList<>();
71-
private String saslMechanism = ConnectionSettings.SASL_MECHANISM_PLAIN;
77+
private String saslMechanism = ConnectionSettings.SASL_MECHANISM_ANONYMOUS;
7278
private final DefaultTlsSettings<T> tlsSettings = new DefaultTlsSettings<>(this);
7379
private final DefaultAffinity<T> affinity = new DefaultAffinity<>(this);
7480

@@ -100,6 +106,7 @@ public T username(String username) {
100106
} else {
101107
this.credentialsProvider = new DefaultUsernamePasswordCredentialsProvider(username, null);
102108
}
109+
this.saslMechanism = SASL_MECHANISM_PLAIN;
103110
return toReturn();
104111
}
105112

@@ -113,6 +120,7 @@ public T password(String password) {
113120
} else {
114121
this.credentialsProvider = new DefaultUsernamePasswordCredentialsProvider(null, password);
115122
}
123+
this.saslMechanism = SASL_MECHANISM_PLAIN;
116124
return toReturn();
117125
}
118126

@@ -157,13 +165,22 @@ public T addressSelector(AddressSelector selector) {
157165

158166
@Override
159167
public T saslMechanism(String mechanism) {
160-
if (!SASL_MECHANISM_PLAIN.equals(mechanism) && !SASL_MECHANISM_EXTERNAL.equals(mechanism)) {
168+
if (!SASL_MECHANISMS.contains(mechanism)) {
161169
throw new IllegalArgumentException(
162170
String.format(
163-
"Unsupported SASL mechanism: '%s'. " + "Supported mechanisms are '%s' and '%s'.",
164-
mechanism, SASL_MECHANISM_PLAIN, SASL_MECHANISM_EXTERNAL));
171+
"Unsupported SASL mechanism: '%s'. " + "Supported mechanisms are: %s.",
172+
mechanism,
173+
SASL_MECHANISMS.stream().map(n -> "'" + n + "'").collect(Collectors.joining(", "))));
165174
}
166175
this.saslMechanism = mechanism;
176+
if (SASL_MECHANISM_ANONYMOUS.equals(mechanism)) {
177+
this.credentialsProvider = null;
178+
} else if (SASL_MECHANISM_PLAIN.equals(mechanism)) {
179+
this.credentialsProvider =
180+
new DefaultUsernamePasswordCredentialsProvider(DEFAULT_USERNAME, DEFAULT_PASSWORD);
181+
} else if (SASL_MECHANISM_EXTERNAL.equals(mechanism)) {
182+
this.credentialsProvider = null;
183+
}
167184
return this.toReturn();
168185
}
169186

@@ -204,12 +221,12 @@ DefaultTlsSettings<?> tlsSettings() {
204221
void copyTo(DefaultConnectionSettings<?> copy) {
205222
copy.host(this.host);
206223
copy.port(this.port);
224+
copy.saslMechanism(this.saslMechanism);
207225
copy.credentialsProvider(this.credentialsProvider);
208226
copy.virtualHost(this.virtualHost);
209227
copy.uris(this.uris.stream().map(URI::toString).toArray(String[]::new));
210228
copy.addressSelector(this.addressSelector);
211229
copy.idleTimeout(this.idleTimeout);
212-
copy.saslMechanism(this.saslMechanism);
213230

214231
if (this.tlsSettings.enabled()) {
215232
this.tlsSettings.copyTo((DefaultTlsSettings<?>) copy.tls());

src/test/java/com/rabbitmq/client/amqp/impl/ConnectionSettingsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
1818
package com.rabbitmq.client.amqp.impl;
1919

20+
import static com.rabbitmq.client.amqp.ConnectionSettings.SASL_MECHANISM_PLAIN;
2021
import static com.rabbitmq.client.amqp.impl.DefaultConnectionSettings.DEFAULT_PASSWORD;
2122
import static com.rabbitmq.client.amqp.impl.DefaultConnectionSettings.DEFAULT_USERNAME;
2223

@@ -34,6 +35,7 @@ void environmentCredentialsProviderShouldBeUsedIfNoneSetForConnection() {
3435
try (Environment environment =
3536
TestUtils.environmentBuilder()
3637
.connectionSettings()
38+
.saslMechanism(SASL_MECHANISM_PLAIN)
3739
.credentialsProvider(new LatchCredentialsProvider(usernameReturnedLatch))
3840
.environmentBuilder()
3941
.build()) {

0 commit comments

Comments
 (0)