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