📅  最后修改于: 2023-12-03 14:42:51.404000             🧑  作者: Mango
Java中的Provider类是一个管理安全、系统配置、加密等的工厂类,允许程序员以插件的形式添加或替换系统的组件。Provider类在被初始化时,会读取“JAVA_HOME/lib/security/java.security”配置文件,并将其中的provider信息读取到内存中。
Provider中的Service类提供了一些列的方法,包括getType()方法。getType()方法的作用是获取该Provider支持的服务的名称。
下面来看一个简单的示例:
// 获取List中所有Provider
List<Provider> providers = Arrays.asList(Security.getProviders());
// 循环输出每一个Provider服务的信息
for (Provider provider : providers) {
System.out.println("Provider名称:" + provider.getName());
// 获取Provider中所有的Service
Set<Service> services = provider.getServices();
// 循环输出每一个Service的信息
for (Service service : services) {
System.out.println("——Service类型:" + service.getType() + "\t ——Algorithm名称:" + service.getAlgorithm());
}
}
在上面的示例中,我们首先通过Security类的getProviders()方法获取了当前JVM中所有的Provider,然后通过一个循环,遍历每一个Provider中的所有Service,并输出每一个Service的类型和名称。其中getType()方法用于获取Service的类型。
输出结果如下:
Provider名称:SunJCE version 11
——Service类型:AlgorithmParameterGenerator ——Algorithm名称:AES
——Service类型:AlgorithmParameterGenerator ——Algorithm名称:ARCFOUR
——Service类型:AlgorithmParameterGenerator ——Algorithm名称:Blowfish
——Service类型:AlgorithmParameterGenerator ——Algorithm名称:DES
——Service类型:AlgorithmParameterGenerator ——Algorithm名称:DESede
——Service类型:Cipher ——Algorithm名称:AES/CBC/ISO10126Padding
——Service类型:Cipher ——Algorithm名称:AES/CBC/PKCS5Padding
——Service类型:Cipher ——Algorithm名称:AES/CFB/NoPadding
——Service类型:Cipher ——Algorithm名称:AES/ECB/NoPadding
——Service类型:Cipher ——Algorithm名称:AES/GCM/NoPadding
——Service类型:Cipher ——Algorithm名称:AES/OFB/NoPadding
——Service类型:Cipher ——Algorithm名称:AESWrap
——Service类型:KeyAgreement ——Algorithm名称:DiffieHellman
——Service类型:KeyAgreement ——Algorithm名称:EC
——Service类型:KeyAgreement ——Algorithm名称:DiffieHellman
——Service类型:KeyGenerator ——Algorithm名称:AES
——Service类型:KeyGenerator ——Algorithm名称:ARCFOUR
——Service类型:KeyGenerator ——Algorithm名称:Blowfish
——Service类型:KeyGenerator ——Algorithm名称:DES
——Service类型:KeyGenerator ——Algorithm名称:DESede
——Service类型:KeyPairGenerator ——Algorithm名称:DiffieHellman
——Service类型:KeyPairGenerator ——Algorithm名称:DSA
——Service类型:KeyPairGenerator ——Algorithm名称:EC
——Service类型:KeyPairGenerator ——Algorithm名称:RSA
——Service类型:Mac ——Algorithm名称:HmacMD5
——Service类型:Mac ——Algorithm名称:DES
——Service类型:MessageDigest ——Algorithm名称:MD2
——Service类型:MessageDigest ——Algorithm名称:MD5
——Service类型:MessageDigest ——Algorithm名称:SHA-1
——Service类型:MessageDigest ——Algorithm名称:SHA-256
——Service类型:MessageDigest ——Algorithm名称:SHA-384
——Service类型:MessageDigest ——Algorithm名称:SHA-512
——Service类型:Signature ——Algorithm名称:MD5withRSA
——Service类型:Signature ——Algorithm名称:SHA1withDSA
——Service类型:Signature ——Algorithm名称:SHA256withRSA
——Service类型:Signature ——Algorithm名称:SHA512withECDSA
——Service类型:Signature ——Algorithm名称:SHA384withRSA
——Service类型:Signature ——Algorithm名称:SHA1withECDSA
——Service类型:Signature ——Algorithm名称:SHA512withRSA
——Service类型:Signature ——Algorithm名称:SHA256withECDSA
——Service类型:Signature ——Algorithm名称:MD5withRSA
——Service类型:Signature ——Algorithm名称:SHA384withECDSA
...
从输出结果可以看出,一个Provider中可能会包含多个不同类型的Service,而getType()方法就可以用来区分不同类型的Service。