- 所有已实现的接口:
-
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
-
Field Summary
Fields declared in class java.util.Properties
defaults
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
清除此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
中包含的属性条目的不可修改视图集。void
forEach
(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
中包含的属性键的不可修改视图集。void
load
(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
仅当指定键当前映射到指定值时才替换指定键的条目。void
replaceAll
(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)
代替。