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