- 所有已实现的接口:
Serializable,Cloneable,Map<Object,Object>
- 已知子类:
AuthProvider
- 算法(例如 DSA、RSA 或 SHA-256)。
- 密钥生成、转换和管理工具(例如特定于算法的密钥)。
某些提供程序实现在其操作期间可能会遇到不可恢复的内部错误,例如与安全令牌通信失败。 ProviderException 应该用于指示此类错误。
请注意,提供者可用于在 Java 中实现任何安全服务,该服务使用可插入架构,并可选择适合底层的实现。
服务类型 Provider 保留供安全框架使用。应用程序无法添加、删除或修改此类服务。以下属性自动放置在每个 Provider 对象中:
| Name | Value |
|---|---|
Provider.id name |
String.valueOf(provider.getName()) |
Provider.id version |
String.valueOf(provider.getVersionStr()) |
Provider.id info |
String.valueOf(provider.getInfo()) |
Provider.id className |
provider.getClass().getName() |
每个提供者都有一个名称和一个版本字符串。提供者通常使用资源目录 META-INF/services 中名为 java.security.Provider 的文件来标识自己。使用 application class loader 通过 ServiceLoader 机制查找安全提供程序。
提供程序可以配置为自动安装并在运行时通过 Security.getProviders() 方法提供。配置和安装安全提供程序的机制是特定于实现的。
- 实现注意事项:
-
JDK 实现支持通过 Java 安装目录中的
conf/security/java.security文件静态注册安全提供程序。这些提供程序由 JDK 运行时自动安装,请参阅 Java 密码体系结构 (JCA) 参考指南中的 提供者类,了解有关特定类型的提供程序(加密服务提供程序)如何工作和安装的信息。 - 自从:
- 1.1
- 参见:
-
内部类总结
内部类 -
字段摘要
在类 java.util.Properties 中声明的字段
defaults -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述voidclear()清除此Provider,使其不再包含用于查找由Provider实现的设施的属性。尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。computeIfAbsent(Object key, Function<? super Object, ? extends Object> mappingFunction) 如果指定的键尚未与值关联(或映射到null),则尝试使用给定的映射函数计算其值并将其输入此map,除非null。computeIfPresent(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) 如果指定键的值存在且非空,则尝试在给定键及其当前映射值的情况下计算新映射。将提供的配置参数应用于此Provider实例并返回配置的Provider。entrySet()返回此Provider中包含的属性条目的不可修改的 Set 视图。voidforEach(BiConsumer<? super Object, ? super Object> action) 对此map中的每个条目执行给定的操作,直到处理完所有条目或操作引发异常。getInfo()返回Provider及其服务的人类可读描述。getName()返回此Provider的名称。getOrDefault(Object key, Object defaultValue) 返回指定键映射到的值,如果此map不包含键的映射,则返回defaultValue。getService(String type, String algorithm) 获取描述此提供者对此算法或别名的指定类型的实现的服务。获取此Provider支持的所有服务的不可修改集。double已弃用。使用getVersionStr()代替。返回此Provider的版本字符串。boolean检查此Provider实例是否已配置。keySet()返回此Provider中包含的属性键的不可修改的 Set 视图。voidload(InputStream inStream) 从输入流中读取属性列表(键和元素对)。merge(Object key, Object value, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) 如果指定的键尚未与值关联或与null关联,则将其与给定值关联。将key属性设置为具有指定的value。void将指定 Map 中的所有映射复制到此Provider。putIfAbsent(Object key, Object value) 如果指定的键尚未与值关联(或映射到null),则将其与给定值关联并返回null,否则返回当前值。protected void添加服务。删除key属性(及其对应的value)。boolean仅当指定键当前映射到指定值时才删除该条目。protected void删除之前使用putService()添加的服务。仅在当前映射到某个值时才替换指定键的条目。boolean仅当当前映射到指定值时才替换指定键的条目。voidreplaceAll(BiFunction<? super Object, ? super Object, ? extends Object> function) 将每个条目的值替换为对该条目调用给定函数的结果,按照条目集迭代器返回条目的顺序,直到处理完所有条目或函数抛出异常。toString()返回一个字符串,其中包含此Provider的名称和版本字符串。values()返回此Provider中包含的属性值的不可修改的 Collection 视图。在类 java.util.Properties 中声明的方法
getProperty, getProperty, list, list, load, loadFromXML, propertyNames, save, setProperty, store, store, storeToXML, storeToXML, storeToXML, stringPropertyNames
-
构造方法详细信息
-
Provider
已弃用。构造一个具有指定名称、版本号和信息的Provider。调用此构造函数等同于使用name名称、Double.toString(version)和info调用Provider(String, String, String)。- 参数:
name- 提供商名称。version- 提供程序版本号。info- 对提供商及其服务的描述。
-
Provider
构造具有指定名称、版本字符串和信息的Provider。版本字符串包含版本号,可选地后跟由“+”、“-”字符之一分隔的其他信息。版本号的格式为:
^[0-9]+(\.[0-9]+)*
为了以 double 形式返回版本号,当有两个以上的组件时(按上面定义的“.”分隔),只保留前两个组件。然后将生成的字符串传递给
Double.valueOf(String)以生成版本号,即getVersion()。如果转换失败,将使用值 0。
- 参数:
name- 提供商名称。versionStr- 提供程序版本字符串。info- 对提供商及其服务的描述。- 自从:
- 9
-
-
方法详情
-
configure
将提供的配置参数应用于此Provider实例并返回配置的Provider。请注意,如果无法就地配置此Provider,则会创建并返回一个新的Provider。因此,调用者应始终使用返回的Provider。- 实现要求:
-
默认实现抛出
UnsupportedOperationException。仅当支持配置参数时,子类才应覆盖此方法。 - 参数:
configArg- 配置此提供程序的配置信息。- 返回:
-
a
Provider配置了提供的配置参数。 - 抛出:
UnsupportedOperationException- 如果不支持配置参数。NullPointerException- 如果提供的配置参数是null。InvalidParameterException- 如果提供的配置参数无效。- 自从:
- 9
-
isConfigured
public boolean isConfigured()检查此Provider实例是否已配置。- 实现要求:
-
默认实现返回
true。如果Provider在构造后需要显式configure调用,则子类应覆盖此方法。 - 返回:
true如果不需要进一步配置,false否则。- 自从:
- 9
-
getName
返回此Provider的名称。- 返回:
-
这个
Provider的名字。
-
getVersion
已弃用。使用getVersionStr()代替。返回此Provider的版本号。- 返回:
-
这个
Provider的版本号。
-
getVersionStr
返回此Provider的版本字符串。- 返回:
-
这个
Provider的版本字符串。 - 自从:
- 9
-
getInfo
返回Provider及其服务的人类可读描述。这可能会返回带有相关链接的 HTML 页面。- 返回:
Provider及其服务的描述。
-
toString
返回一个字符串,其中包含此Provider的名称和版本字符串。 -
clear
public void clear()清除此Provider,使其不再包含用于查找由Provider实现的设施的属性。如果启用了安全管理器,则使用字符串
"clearProviderProperties."+name(其中name是提供者名称)调用其checkSecurityAccess方法以查看是否可以清除此提供者。- 指定者:
clear在接口Map<Object,中Object> - 重写:
clear在类Hashtable<Object,中Object> - 抛出:
SecurityException- 如果存在安全管理器并且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以清除此提供程序- 自从:
- 1.2
-
load
从输入流中读取属性列表(键和元素对)。- 重写:
load在类Properties中- 参数:
inStream- 输入流。- 抛出:
IOException- 如果从输入流读取时发生错误。- 参见:
-
putAll
将指定 Map 中的所有映射复制到此Provider。这些映射将替换此Provider对指定map中当前任何键的任何属性。 -
entrySet
返回此Provider中包含的属性条目的不可修改的 Set 视图。 -
keySet
返回此Provider中包含的属性键的不可修改的 Set 视图。 -
values
返回此Provider中包含的属性值的不可修改的 Collection 视图。 -
put
将key属性设置为具有指定的value。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。- 指定者:
put在接口Map<Object,中Object> - 重写:
put在类Hashtable<Object,中Object> - 参数:
key- 哈希表键value- 值- 返回:
-
此哈希表中指定键的先前值,如果没有,则返回
null - 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。- 自从:
- 1.2
- 参见:
-
putIfAbsent
如果指定的键尚未与值关联(或映射到null),则将其与给定值关联并返回null,否则返回当前值。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。- 参数:
key- 与指定值关联的键value- 与指定键关联的值- 返回:
-
与指定键关联的先前值,或者
null如果键没有映射。 (如果实现支持空值,则null返回还可以指示之前将null与键相关联的映射。) - 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。- 自从:
- 1.8
-
remove
删除key属性(及其对应的value)。如果启用了安全管理器,则使用字符串
"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以删除该提供者的属性。- 指定者:
remove在接口Map<Object,中Object> - 重写:
remove在类Hashtable<Object,中Object> - 参数:
key- 需要删除的密钥- 返回:
-
键在此哈希表中映射到的值,如果键没有映射,则为
null - 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以删除此提供程序的属性。- 自从:
- 1.2
-
remove
仅当指定键当前映射到指定值时才删除该条目。如果启用了安全管理器,则使用字符串
"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以删除该提供者的属性。- 参数:
key- 与指定值关联的键value- 预期与指定键关联的值- 返回:
true如果值被删除- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以删除此提供程序的属性。- 自从:
- 1.8
-
replace
仅当当前映射到指定值时才替换指定键的条目。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。- 参数:
key- 与指定值关联的键oldValue- 预期与指定键关联的值newValue- 与指定键关联的值- 返回:
true如果值被替换- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。- 自从:
- 1.8
-
replace
仅在当前映射到某个值时才替换指定键的条目。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。- 参数:
key- 与指定值关联的键value- 与指定键关联的值- 返回:
-
与指定键关联的先前值,或者
null如果键没有映射。 (如果实现支持空值,则null返回还可以指示之前将null与键相关联的映射。) - 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。- 自从:
- 1.8
-
replaceAll
将每个条目的值替换为对该条目调用给定函数的结果,按照条目集迭代器返回条目的顺序,直到处理完所有条目或函数抛出异常。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。- 参数:
function- 应用于每个条目的函数- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。- 自从:
- 1.8
-
compute
public Object compute(Object key, BiFunction <? super Object , ? super Object , ? extends Object > remappingFunction) 尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name和"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值并删除此提供者的属性。- 指定者:
compute在接口Map<Object,中Object> - 重写:
compute在类Hashtable<Object,中Object> - 参数:
key- 与指定值关联的键remappingFunction- 计算值的重映射函数- 返回:
- 与指定键关联的新值,如果没有则为 null
- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值或删除属性。- 自从:
- 1.8
-
computeIfAbsent
public Object computeIfAbsent(Object key, Function <? super Object , ? extends Object > mappingFunction) 如果指定的键尚未与值关联(或映射到null),则尝试使用给定的映射函数计算其值并将其输入此map,除非null。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name和"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值并删除此提供者的属性。- 指定者:
computeIfAbsent在接口Map<Object,中Object> - 重写:
computeIfAbsent在类Hashtable<Object,中Object> - 参数:
key- 与指定值关联的键mappingFunction- 计算值的映射函数- 返回:
- 与指定键关联的当前(现有或计算)值,如果计算值为 null,则为 null
- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值和删除属性。- 自从:
- 1.8
-
computeIfPresent
public Object computeIfPresent(Object key, BiFunction <? super Object , ? super Object , ? extends Object > remappingFunction) 如果指定键的值存在且非空,则尝试在给定键及其当前映射值的情况下计算新映射。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name和"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值并删除此提供者的属性。- 指定者:
computeIfPresent在接口Map<Object,中Object> - 重写:
computeIfPresent在类Hashtable<Object,中Object> - 参数:
key- 与指定值关联的键remappingFunction- 计算值的重映射函数- 返回:
- 与指定键关联的新值,如果没有则为 null
- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值或删除属性。- 自从:
- 1.8
-
merge
public Object merge(Object key, Object value, BiFunction <? super Object , ? super Object , ? extends Object > remappingFunction) 如果指定的键尚未与值关联或与null关联,则将其与给定值关联。否则,用给定重映射函数的结果替换该值,或者如果结果为null则删除。当组合一个键的多个映射值时,此方法可能有用。如果启用了安全管理器,则使用字符串
"putProviderProperty."+name和"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值并删除此提供者的属性。- 指定者:
merge在接口Map<Object,中Object> - 重写:
merge在类Hashtable<Object,中Object> - 参数:
key- 与结果值关联的键value- 要与键关联的现有值合并的非空值,或者,如果没有现有值或空值与键关联,则与键关联remappingFunction- 重新映射函数以重新计算值(如果存在)- 返回:
- 与指定键关联的新值,如果没有值与该键关联,则返回 null
- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值或删除属性。- 自从:
- 1.8
-
getOrDefault
从接口Map复制的描述返回指定键映射到的值,如果此map不包含键的映射,则返回defaultValue。- 参数:
key- 要返回其关联值的键defaultValue- 键的默认映射- 返回:
-
指定键映射到的值,或者
defaultValue如果此map不包含键的映射 - 自从:
- 1.8
-
forEach
从接口Map复制的描述对此map中的每个条目执行给定的操作,直到处理完所有条目或操作引发异常。除非实现类另有指定,否则操作将按照条目集迭代的顺序执行(如果指定了迭代顺序)。操作抛出的异常将传递给调用者。- 参数:
action- 每个条目要执行的操作- 自从:
- 1.8
-
getService
获取描述此提供者对此算法或别名的指定类型的实现的服务。如果不存在这样的实现,则此方法返回null。如果有两项匹配服务,一项使用putService()添加到此提供者,一项通过put()添加,则返回通过putService()添加的服务。- 参数:
type- 请求的service类型(例如MessageDigest)algorithm- 所请求服务的不区分大小写的算法名称(或备用别名)(例如,SHA-1)- 返回:
-
描述此 Provider 的匹配服务的服务或
null(如果不存在此类服务) - 抛出:
NullPointerException- 如果类型或算法是null- 自从:
- 1.5
-
getServices
获取此Provider支持的所有服务的不可修改集。- 返回:
-
此
Provider支持的所有服务的不可修改集 - 自从:
- 1.5
-
putService
添加服务。如果存在具有相同算法名称的相同类型的服务,并且它是使用putService()添加的,它将被新服务替换。此方法还将有关此服务的信息以 Java 加密体系结构 (JCA) 参考指南 中描述的格式放置在提供商的哈希表值中。此外,如果有安全管理器,则使用字符串
"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以设置此提供者的属性值。如果使用checkSecurityAccess的默认实现(即未覆盖该方法),则会导致调用具有SecurityPermission("putProviderProperty."+name)权限的安全管理器的checkPermission方法。- 参数:
s- 要添加的服务- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。NullPointerException- 如果 s 是null- 自从:
- 1.5
-
removeService
删除之前使用putService()添加的服务。指定的服务已从此Provider中删除。getService()将不再返回它,并且它的信息将从该提供商的哈希表中删除。此外,如果有安全管理器,则使用字符串
"removeProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供者名称,以查看是否可以删除此提供者的属性。如果使用checkSecurityAccess的默认实现(即未覆盖该方法),则会导致调用具有SecurityPermission("removeProviderProperty."+name)权限的安全管理器的checkPermission方法。- 参数:
s- 要删除的服务- 抛出:
SecurityException- 如果安全管理器存在且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以删除此提供程序的属性。NullPointerException- 如果 s 是null- 自从:
- 1.5
-
Provider(String, String, String)代替。