HADOOP-11054. Add a KeyProvider instantiation based on a URI. (tucu)
This commit is contained in:
parent
8f1a668575
commit
41f1662d46
|
@ -496,6 +496,8 @@ Release 2.6.0 - UNRELEASED
|
|||
HADOOP-10863. KMS should have a blacklist for decrypting EEKs.
|
||||
(asuresh via tucu)
|
||||
|
||||
HADOOP-11054. Add a KeyProvider instantiation based on a URI. (tucu)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HADOOP-10838. Byte array native checksumming. (James Thomas via todd)
|
||||
|
|
|
@ -63,16 +63,10 @@ public abstract class KeyProviderFactory {
|
|||
for(String path: conf.getStringCollection(KEY_PROVIDER_PATH)) {
|
||||
try {
|
||||
URI uri = new URI(path);
|
||||
boolean found = false;
|
||||
for(KeyProviderFactory factory: serviceLoader) {
|
||||
KeyProvider kp = factory.createProvider(uri, conf);
|
||||
if (kp != null) {
|
||||
result.add(kp);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
KeyProvider kp = get(uri, conf);
|
||||
if (kp != null) {
|
||||
result.add(kp);
|
||||
} else {
|
||||
throw new IOException("No KeyProviderFactory for " + uri + " in " +
|
||||
KEY_PROVIDER_PATH);
|
||||
}
|
||||
|
@ -83,4 +77,26 @@ public abstract class KeyProviderFactory {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a KeyProvider based on a provided URI.
|
||||
*
|
||||
* @param uri key provider URI
|
||||
* @param conf configuration to initialize the key provider
|
||||
* @return the key provider for the specified URI, or <code>NULL</code> if
|
||||
* a provider for the specified URI scheme could not be found.
|
||||
* @throws IOException thrown if the provider failed to initialize.
|
||||
*/
|
||||
public static KeyProvider get(URI uri, Configuration conf)
|
||||
throws IOException {
|
||||
KeyProvider kp = null;
|
||||
for (KeyProviderFactory factory : serviceLoader) {
|
||||
kp = factory.createProvider(uri, conf);
|
||||
if (kp != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return kp;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -357,4 +357,17 @@ public class TestKeyProviderFactory {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProviderViaURI() throws Exception {
|
||||
Configuration conf = new Configuration(false);
|
||||
URI uri = new URI(JavaKeyStoreProvider.SCHEME_NAME + "://file" + tmpDir +
|
||||
"/test.jks");
|
||||
KeyProvider kp = KeyProviderFactory.get(uri, conf);
|
||||
Assert.assertNotNull(kp);
|
||||
Assert.assertEquals(JavaKeyStoreProvider.class, kp.getClass());
|
||||
uri = new URI("foo://bar");
|
||||
kp = KeyProviderFactory.get(uri, conf);
|
||||
Assert.assertNull(kp);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue