此类集中了所有安全属性和常见安全方法。其主要用途之一是管理提供者。
安全属性的默认值从特定于实现的位置读取,通常是Java安装目录中的属性文件conf/security/java.security
。
- 实现注意事项:
-
如果无法加载属性文件,则JDK实现在初始化
Security
类时会抛出未指定的错误。 - 自版本:
- 1.1
-
Method Summary
Modifier and TypeMethodDescriptionstatic int
addProvider
(Provider provider) 添加一个提供者到下一个可用位置。static String
getAlgorithmProperty
(String algName, String propName) 已弃用。此方法曾经返回“SUN”加密服务提供者主文件中专有属性的值,以确定如何解析特定算法参数。getAlgorithms
(String serviceName) 返回一个包含指定Java加密服务(例如Signature
、MessageDigest
、Cipher
、Mac
、KeyStore
)所有可用算法或类型名称的String
对象集合。static String
getProperty
(String key) 获取安全属性值。static Provider
getProvider
(String name) 返回安装了指定名称的提供者(如果有)。static Provider[]
返回包含所有已安装提供者的数组。static Provider[]
getProviders
(String filter) 返回包含满足指定选择条件的所有已安装提供者的数组,如果没有安装这样的提供者,则返回null
。static Provider[]
getProviders
(Map<String, String> filter) 返回包含满足指定选择条件的所有已安装提供者的数组,如果没有安装这样的提供者,则返回null
。static int
insertProviderAt
(Provider provider, int position) 在指定位置添加新提供者。static void
removeProvider
(String name) 移除指定名称的提供者。static void
setProperty
(String key, String datum) 设置安全属性值。
-
Method Details
-
getAlgorithmProperty
Deprecated.This method used to return the value of a proprietary property in the master file of the "SUN" Cryptographic Service Provider in order to determine how to parse algorithm-specific parameters. Use the new provider-based and algorithm-independentAlgorithmParameters
andKeyFactory
engine classes (introduced in the J2SE version 1.2 platform) instead.获取算法的指定属性。算法名称应为标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范。一种可能的用途是由专用算法解析器使用,它们可以将类映射到它们理解的算法(就像密钥解析器一样)。- 参数:
-
algName
- 算法名称。 -
propName
- 要获取的属性名称。 - 返回:
- 指定属性的值。
-
insertProviderAt
在指定位置添加新提供者。位置是提供者被搜索请求算法的首选顺序。位置是基于1的,即1是最优先的,其次是2,依此类推。如果给定提供者已安装在请求的位置,则曾在该位置的提供者以及位置大于
position
的所有提供者都会向上移动一个位置(向已安装提供者列表的末尾移动)。如果提供者已安装,则无法添加提供者。
如果存在安全管理器,则将使用
"insertProvider"
权限目标名称调用SecurityManager.checkSecurityAccess(java.lang.String)
方法,以查看是否可以添加新提供者。如果拒绝了此权限检查,则再次使用"insertProvider."+provider.getName()
权限目标名称调用checkSecurityAccess
。如果两个检查都被拒绝,则抛出SecurityException
。- 参数:
-
provider
- 要添加的提供者。 -
position
- 调用者希望为此提供者设置的首选位置。 - 返回:
- 提供者添加的实际首选位置,如果提供者已安装,则返回-1。
- 抛出:
-
NullPointerException
- 如果提供者为null
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkSecurityAccess(java.lang.String)
方法拒绝添加新提供者的访问 - 参见:
-
addProvider
添加一个提供者到下一个可用位置。如果存在安全管理器,则将使用
"insertProvider"
权限目标名称调用SecurityManager.checkSecurityAccess(java.lang.String)
方法,以查看是否可以添加新提供者。如果拒绝了此权限检查,则再次使用"insertProvider."+provider.getName()
权限目标名称调用checkSecurityAccess
。如果两个检查都被拒绝,则抛出SecurityException
。- 参数:
-
provider
- 要添加的提供者。 - 返回:
- 提供者添加的首选位置,如果提供者已安装,则返回-1。
- 抛出:
-
NullPointerException
- 如果提供者为null
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkSecurityAccess(java.lang.String)
方法拒绝添加新提供者的访问 - 参见:
-
removeProvider
移除指定名称的提供者。当移除指定提供者时,所有位于指定提供者位置之后的提供者都会向下移动一个位置(向已安装提供者列表的头部移动)。
如果提供者未安装或名称为
null
,此方法将静默返回。首先,如果存在安全管理器,则将使用字符串
"removeProvider."+name
调用其checkSecurityAccess
方法,以查看是否可以移除提供者。如果使用checkSecurityAccess
的默认实现(即未覆盖该方法),则将调用安全管理器的checkPermission
方法,其中包含SecurityPermission("removeProvider."+name)
权限。- 参数:
-
name
- 要移除的提供者的名称。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其SecurityManager.checkSecurityAccess(java.lang.String)
方法拒绝移除提供者的访问 - 参见:
-
getProviders
返回包含所有已安装提供者的数组。数组中提供者的顺序是它们的首选顺序。- 返回:
- 所有已安装提供者的数组。
-
getProvider
返回安装了指定名称的提供者(如果有)。如果未安装指定名称的提供者或名称为null
,则返回null
。- 参数:
-
name
- 要获取的提供者的名称。 - 返回:
- 指定名称的提供者。
- 参见:
-
getProviders
返回包含满足指定选择条件的所有已安装提供者的数组,如果没有安装这样的提供者,则返回null
。返回的提供者根据它们的首选顺序排序。加密服务始终与特定算法或类型相关联。例如,数字签名服务始终与特定算法(例如DSA)相关联,CertificateFactory服务始终与特定证书类型(例如X.509)相关联。
选择条件必须以以下两种格式之一指定:
- <crypto_service>.<algorithm_or_type>
加密服务名称不得包含任何点。
提供者满足指定选择条件,如果提供者为指定的加密服务实现了指定的算法或类型。
例如,“CertificateFactory.X.509”将被任何提供了X.509证书的CertificateFactory实现满足。
- <crypto_service>.<algorithm_or_type> <attribute_name>:<attribute_value>
加密服务名称不得包含任何点。在<algorithm_or_type>和<attribute_name>之间必须有一个或多个空格字符。
提供者满足此选择条件,如果提供者为指定的加密服务实现了指定的算法或类型,并且其实现符合由指定属性名称/值对表示的约束。
例如,“Signature.SHA1withDSA KeySize:1024”将被任何实现了SHA1withDSA签名算法且密钥大小为1024(或更大)的提供者满足。
有关标准加密服务名称、标准算法名称和标准属性名称的信息,请参阅Java安全标准算法名称规范。
- 参数:
-
filter
- 选择提供程序的标准。过滤器不区分大小写。 - 返回:
-
满足选择标准的所有已安装提供程序,如果没有安装这样的提供程序,则返回
null
。 - 抛出:
-
InvalidParameterException
- 如果过滤器不符合所需格式 -
NullPointerException
- 如果过滤器为null
- 自版本:
- 1.3
- 参见:
- <crypto_service>.<algorithm_or_type>
-
getProviders
返回一个包含满足指定选择标准的所有已安装提供程序的数组,如果没有安装这样的提供程序,则返回null
。返回的提供程序按照它们的首选顺序排序。选择标准由一个映射表示。每个映射条目代表一个选择标准。当且仅当提供程序满足所有选择标准时,才会选择提供程序。在这样的映射中,任何条目的键必须符合以下两种格式之一:
- <crypto_service>.<algorithm_or_type>
加密服务名称不得包含任何点。
与键关联的值必须是空字符串。
如果提供程序为指定的加密服务实现了指定的算法或类型,则提供程序满足此选择标准。
- <crypto_service>. <algorithm_or_type> <attribute_name>
加密服务名称不得包含任何点。在<algorithm_or_type>和<attribute_name>之间必须有一个或多个空格字符。
与键关联的值必须是非空字符串。如果提供程序为指定的加密服务实现了指定的算法或类型,并且其实现符合指定属性名称/值对所表示的约束,则提供程序满足此选择标准。
有关标准加密服务名称、标准算法名称和标准属性名称的信息,请参阅Java安全标准算法名称规范。
- 参数:
-
filter
- 选择提供程序的标准。过滤器不区分大小写。 - 返回:
-
满足选择标准的所有已安装提供程序,如果没有安装这样的提供程序,则返回
null
。 - 抛出:
-
InvalidParameterException
- 如果过滤器不符合所需格式 -
NullPointerException
- 如果过滤器为null
- 自版本:
- 1.3
- 参见:
- <crypto_service>.<algorithm_or_type>
-
getProperty
获取安全属性值。首先,如果存在安全管理器,则将调用其
checkPermission
方法,使用java.security.SecurityPermission("getProperty."+key)
权限来查看是否可以检索指定的安全属性值。- 参数:
-
key
- 正在检索的属性的键。 - 返回:
-
安全属性的值,如果没有具有该键的属性,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器,并且其SecurityManager.checkPermission(java.security.Permission)
方法拒绝访问以检索指定的安全属性值 -
NullPointerException
- 如果键为null
- 参见:
-
setProperty
设置安全属性值。首先,如果存在安全管理器,则将调用其
checkPermission
方法,使用java.security.SecurityPermission("setProperty."+key)
权限来查看是否可以设置指定的安全属性值。- 参数:
-
key
- 要设置的属性的名称。 -
datum
- 要设置的属性的值。 - 抛出:
-
SecurityException
- 如果存在安全管理器,并且其SecurityManager.checkPermission(java.security.Permission)
方法拒绝访问以设置指定的安全属性值 -
NullPointerException
- 如果键或值为null
- 参见:
-
getAlgorithms
返回一个包含指定Java加密服务(例如Signature
、MessageDigest
、Cipher
、Mac
、KeyStore
)的所有可用算法或类型名称的String
对象集合。如果没有支持指定服务的提供程序,或者serviceName
为null
,则返回一个空集。有关完整的Java加密服务列表,请参阅Java加密架构(JCA)参考指南。注意:返回的集合是不可变的。- 参数:
-
serviceName
- Java加密服务的名称(例如Signature
、MessageDigest
、Cipher
、Mac
、KeyStore
)。注意:此参数不区分大小写。 - 返回:
-
包含指定Java加密服务的所有可用算法或类型名称的
String
对象集合,如果没有提供程序支持指定的服务,则返回一个空集。 - 自版本:
- 1.4
-