|
16 | 16 |
|
17 | 17 | package com.rabbitmq.client; |
18 | 18 |
|
19 | | -import javax.security.auth.callback.CallbackHandler; |
20 | | -import javax.security.sasl.Sasl; |
21 | | -import javax.security.sasl.SaslClient; |
22 | | -import javax.security.sasl.SaslException; |
| 19 | +import com.rabbitmq.client.impl.ExternalMechanism; |
| 20 | +import com.rabbitmq.client.impl.PlainMechanism; |
| 21 | + |
23 | 22 | import java.util.Arrays; |
24 | 23 | import java.util.HashSet; |
25 | | -import java.util.List; |
26 | 24 | import java.util.Set; |
27 | 25 |
|
28 | 26 | /** |
29 | | - * Default implementation of SaslConfig that uses the standard Java |
30 | | - * algorithm for selecting a sasl client. |
31 | | - * @see com.rabbitmq.client.ConnectionFactory |
| 27 | + * Default SASL configuration. Uses one of our built-in mechanisms. |
32 | 28 | */ |
33 | 29 | public class DefaultSaslConfig implements SaslConfig { |
34 | | - public static final String[] DEFAULT_PREFERRED_MECHANISMS = new String[]{"PLAIN"}; |
| 30 | + private final String mechanism; |
35 | 31 |
|
36 | | - private final ConnectionFactory factory; |
37 | | - private final List<String> mechanisms; |
38 | | - private final CallbackHandler callbackHandler; |
| 32 | + public static final DefaultSaslConfig PLAIN = new DefaultSaslConfig("PLAIN"); |
| 33 | + public static final DefaultSaslConfig EXTERNAL = new DefaultSaslConfig("EXTERNAL"); |
39 | 34 |
|
40 | 35 | /** |
41 | | - * Create a DefaultSaslConfig which only wants to use PLAIN. |
| 36 | + * Create a DefaultSaslConfig with an explicit mechanism to use. |
42 | 37 | * |
43 | | - * @param factory - the ConnectionFactory to use to obtain username, password and host |
| 38 | + * @param mechanism - a SASL mechanism to use |
44 | 39 | */ |
45 | | - public DefaultSaslConfig(ConnectionFactory factory) { |
46 | | - this(factory, DEFAULT_PREFERRED_MECHANISMS); |
| 40 | + private DefaultSaslConfig(String mechanism) { |
| 41 | + this.mechanism = mechanism; |
47 | 42 | } |
48 | 43 |
|
49 | | - /** |
50 | | - * Create a DefaultSaslConfig with a list of mechanisms to use. |
51 | | - * |
52 | | - * @param factory - the ConnectionFactory to use to obtain username, password and host |
53 | | - * @param mechanisms - a list of SASL mechanisms to use (in descending order of preference) |
54 | | - */ |
55 | | - public DefaultSaslConfig(ConnectionFactory factory, String[] mechanisms) { |
56 | | - this.factory = factory; |
57 | | - callbackHandler = new UsernamePasswordCallbackHandler(factory); |
58 | | - this.mechanisms = Arrays.asList(mechanisms); |
59 | | - } |
60 | | - |
61 | | - public SaslClient getSaslClient(String[] serverMechanisms) throws SaslException { |
| 44 | + public SaslMechanism getSaslMechanism(String[] serverMechanisms) { |
62 | 45 | Set<String> server = new HashSet<String>(Arrays.asList(serverMechanisms)); |
63 | 46 |
|
64 | | - for (String mechanism: mechanisms) { |
65 | | - if (server.contains(mechanism)) { |
66 | | - SaslClient saslClient = Sasl.createSaslClient(new String[]{mechanism}, |
67 | | - null, "AMQP", factory.getHost(), null, callbackHandler); |
68 | | - if (saslClient != null) return saslClient; |
| 47 | + if (server.contains(mechanism)) { |
| 48 | + if (mechanism.equals("PLAIN")) { |
| 49 | + return new PlainMechanism(); |
| 50 | + } |
| 51 | + else if (mechanism.equals("EXTERNAL")) { |
| 52 | + return new ExternalMechanism(); |
69 | 53 | } |
70 | 54 | } |
71 | 55 | return null; |
|
0 commit comments