- 所有已实现的接口:
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
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述void
clear()
清除此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 视图。void
forEach
(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 视图。void
load
(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
仅当当前映射到指定值时才替换指定键的条目。void
replaceAll
(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)
代替。