Module java.base
Package java.security

Class Security

java.lang.Object
java.security.Security

public final class Security extends Object

此类集中了所有安全属性和常见安全方法。其主要用途之一是管理提供者。

安全属性的默认值从特定于实现的位置读取,通常是Java安装目录中的属性文件conf/security/java.security

实现注意事项:
如果无法加载属性文件,则JDK实现在初始化Security类时会抛出未指定的错误。
自版本:
1.1
  • Method Details

    • getAlgorithmProperty

      @Deprecated public static String getAlgorithmProperty(String algName, String propName)
      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-independent AlgorithmParameters and KeyFactory engine classes (introduced in the J2SE version 1.2 platform) instead.
      获取算法的指定属性。算法名称应为标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范。一种可能的用途是由专用算法解析器使用,它们可以将类映射到它们理解的算法(就像密钥解析器一样)。
      参数:
      algName - 算法名称。
      propName - 要获取的属性名称。
      返回:
      指定属性的值。
    • insertProviderAt

      public static int insertProviderAt(Provider provider, int position)
      在指定位置添加新提供者。位置是提供者被搜索请求算法的首选顺序。位置是基于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

      public static int addProvider(Provider provider)
      添加一个提供者到下一个可用位置。

      如果存在安全管理器,则将使用"insertProvider"权限目标名称调用SecurityManager.checkSecurityAccess(java.lang.String)方法,以查看是否可以添加新提供者。如果拒绝了此权限检查,则再次使用"insertProvider."+provider.getName()权限目标名称调用checkSecurityAccess。如果两个检查都被拒绝,则抛出SecurityException

      参数:
      provider - 要添加的提供者。
      返回:
      提供者添加的首选位置,如果提供者已安装,则返回-1。
      抛出:
      NullPointerException - 如果提供者为null
      SecurityException - 如果存在安全管理器且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝添加新提供者的访问
      参见:
    • removeProvider

      public static void removeProvider(String name)
      移除指定名称的提供者。

      当移除指定提供者时,所有位于指定提供者位置之后的提供者都会向下移动一个位置(向已安装提供者列表的头部移动)。

      如果提供者未安装或名称为null,此方法将静默返回。

      首先,如果存在安全管理器,则将使用字符串"removeProvider."+name调用其checkSecurityAccess方法,以查看是否可以移除提供者。如果使用checkSecurityAccess的默认实现(即未覆盖该方法),则将调用安全管理器的checkPermission方法,其中包含SecurityPermission("removeProvider."+name)权限。

      参数:
      name - 要移除的提供者的名称。
      抛出:
      SecurityException - 如果存在安全管理器且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝移除提供者的访问
      参见:
    • getProviders

      public static Provider[] getProviders()
      返回包含所有已安装提供者的数组。数组中提供者的顺序是它们的首选顺序。
      返回:
      所有已安装提供者的数组。
    • getProvider

      public static Provider getProvider(String name)
      返回安装了指定名称的提供者(如果有)。如果未安装指定名称的提供者或名称为null,则返回null
      参数:
      name - 要获取的提供者的名称。
      返回:
      指定名称的提供者。
      参见:
    • getProviders

      public static Provider[] getProviders(String filter)
      返回包含满足指定选择条件的所有已安装提供者的数组,如果没有安装这样的提供者,则返回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
      参见:
    • getProviders

      public static Provider[] getProviders(Map<String,String> filter)
      返回一个包含满足指定选择标准的所有已安装提供程序的数组,如果没有安装这样的提供程序,则返回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
      参见:
    • getProperty

      public static String getProperty(String key)
      获取安全属性值。

      首先,如果存在安全管理器,则将调用其checkPermission方法,使用java.security.SecurityPermission("getProperty."+key)权限来查看是否可以检索指定的安全属性值。

      参数:
      key - 正在检索的属性的键。
      返回:
      安全属性的值,如果没有具有该键的属性,则返回null
      抛出:
      SecurityException - 如果存在安全管理器,并且其SecurityManager.checkPermission(java.security.Permission)方法拒绝访问以检索指定的安全属性值
      NullPointerException - 如果键为null
      参见:
    • setProperty

      public static void setProperty(String key, String datum)
      设置安全属性值。

      首先,如果存在安全管理器,则将调用其checkPermission方法,使用java.security.SecurityPermission("setProperty."+key)权限来查看是否可以设置指定的安全属性值。

      参数:
      key - 要设置的属性的名称。
      datum - 要设置的属性的值。
      抛出:
      SecurityException - 如果存在安全管理器,并且其SecurityManager.checkPermission(java.security.Permission)方法拒绝访问以设置指定的安全属性值
      NullPointerException - 如果键或值为null
      参见:
    • getAlgorithms

      public static Set<String> getAlgorithms(String serviceName)
      返回一个包含指定Java加密服务(例如SignatureMessageDigestCipherMacKeyStore)的所有可用算法或类型名称的String对象集合。如果没有支持指定服务的提供程序,或者serviceNamenull,则返回一个空集。有关完整的Java加密服务列表,请参阅Java加密架构(JCA)参考指南。注意:返回的集合是不可变的。
      参数:
      serviceName - Java加密服务的名称(例如SignatureMessageDigestCipherMacKeyStore)。注意:此参数不区分大小写。
      返回:
      包含指定Java加密服务的所有可用算法或类型名称的String对象集合,如果没有提供程序支持指定的服务,则返回一个空集。
      自版本:
      1.4