Skip to content

Commit 5893116

Browse files
author
Simon MacMullen
committed
Take explicit control of which SASL mechanism gets chosen.
1 parent 70e0b5c commit 5893116

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

src/com/rabbitmq/client/DefaultSaslConfig.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,22 @@
2020
import javax.security.sasl.Sasl;
2121
import javax.security.sasl.SaslClient;
2222
import javax.security.sasl.SaslException;
23-
import java.util.Map;
23+
import java.util.Arrays;
24+
import java.util.HashSet;
25+
import java.util.List;
26+
import java.util.Set;
2427

2528
/**
2629
* Default implementation of SaslConfig that uses the standard Java
2730
* algorithm for selecting a sasl client.
2831
* @see com.rabbitmq.client.ConnectionFactory
2932
*/
3033
public class DefaultSaslConfig implements SaslConfig {
34+
public static final String[] DEFAULT_PREFERRED_MECHANISMS = new String[]{"PLAIN"};
35+
3136
private ConnectionFactory factory;
3237
private String authorizationId;
33-
private Map<String,?> mechanismProperties;
38+
private String[] preferredMechanisms = DEFAULT_PREFERRED_MECHANISMS;
3439
private CallbackHandler callbackHandler;
3540

3641
public DefaultSaslConfig(ConnectionFactory factory) {
@@ -42,16 +47,28 @@ public void setAuthorizationId(String authorizationId) {
4247
this.authorizationId = authorizationId;
4348
}
4449

45-
public void setMechanismProperties(Map<String, ?> mechanismProperties) {
46-
this.mechanismProperties = mechanismProperties;
50+
/**
51+
* Set a list of SASL mechanisms to use (in descending order of preference)
52+
* @param preferredMechanisms
53+
*/
54+
public void setPreferredMechanisms(String[] preferredMechanisms) {
55+
this.preferredMechanisms = preferredMechanisms;
4756
}
4857

4958
public void setCallbackHandler(CallbackHandler callbackHandler) {
5059
this.callbackHandler = callbackHandler;
5160
}
5261

53-
public SaslClient getSaslClient(String[] mechanisms) throws SaslException {
54-
return Sasl.createSaslClient(mechanisms, authorizationId, "AMQP",
55-
factory.getHost(), mechanismProperties, callbackHandler);
62+
public SaslClient getSaslClient(String[] serverMechanisms) throws SaslException {
63+
List<String> server = Arrays.asList(serverMechanisms);
64+
List<String> client = Arrays.asList(preferredMechanisms);
65+
client.retainAll(server);
66+
67+
for (String mechanism: client) {
68+
SaslClient saslClient = Sasl.createSaslClient(new String[]{mechanism},
69+
authorizationId, "AMQP", factory.getHost(), null, callbackHandler);
70+
if (saslClient != null) return saslClient;
71+
}
72+
return null;
5673
}
5774
}

0 commit comments

Comments
 (0)