< prev index next >

src/java.base/share/classes/sun/security/tools/KeyStoreUtil.java

Print this page
rev 15253 : 8130302: jarsigner and keytool -providerClass needs be re-examined for modules

*** 36,53 **** --- 36,56 ---- import java.io.StringReader; import java.net.URL; import java.security.KeyStore; + import java.security.Provider; + import java.security.Security; import java.security.cert.X509Certificate; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Properties; + import java.util.ServiceLoader; import sun.security.util.PropertyExpander; /** * <p> This class provides several utilities to <code>KeyStore</code>.
*** 257,262 **** --- 260,336 ---- } else { result.addAll(Arrays.asList(args)); return result.toArray(new String[result.size()]); } } + + /** + * Loads a security provider in a module with its name. + * + * @param provName the name + * @param arg optional arg + * @param debug if true, print some log + * @throws IllegalAccessException if a provider cannot be added + */ + public static void loadProviderByName(String provName, String arg, boolean debug) { + for (Provider p: ServiceLoader.load(Provider.class)) { + if (p.getName().equals(provName)) { + if (arg != null) { + p = p.configure(arg); + } + Security.addProvider(p); + if (debug) { + System.out.println("loadProviderByName: " + p); + } + return; + } + } + throw new IllegalArgumentException(provName); + } + + /** + * Loads a security provider with its full-qualified name. + * + * @param provClass the class name + * @param arg optional arg + * @param cl optional class loader + * @param debug if true, print some log + * @throws IllegalAccessException if a provider cannot be added + */ + public static void loadProviderByClass(String provClass, String arg, + ClassLoader cl, boolean debug) { + Provider prov = null; + for (Provider p: ServiceLoader.load(Provider.class)) { + // A provider in module can also be use class name + if (p.getClass().getName().equals(provClass)) { + prov = p; + break; + } + } + if (prov == null) { + // legacy provider on classpath + try { + Class<?> clazz; + if (cl != null) { + clazz = cl.loadClass(provClass); + } else { + clazz = Class.forName(provClass); + } + KeyStoreUtil.class.getModule().addReads(clazz.getModule()); + Object obj = clazz.newInstance(); + if (!(obj instanceof Provider)) { + throw new IllegalArgumentException(provClass); + } + prov = (Provider) obj; + } catch (Exception e) { + throw new IllegalArgumentException(provClass, e); + } + } + if (arg != null) { + prov = prov.configure(arg); + } + Security.addProvider(prov); + if (debug) { + System.out.println("loadProviderByClass: " + prov); + } + } }
< prev index next >