Module java.base
Package java.security

Class Provider

所有已实现的接口:
Serializable, Cloneable, Map<Object,Object>
直接已知的子类:
AuthProvider

public abstract class Provider extends Properties
此类代表Java安全API的“提供者”,其中提供者实现Java安全的一些或全部部分。提供者可能实现的服务包括:
  • 算法(如DSA、RSA或SHA-256)。
  • 密钥生成、转换和管理设施(例如针对特定算法的密钥)。

一些提供者实现可能在其操作过程中遇到无法恢复的内部错误,例如无法与安全令牌通信。应使用 ProviderException 来指示此类错误。

请注意,提供者可用于实现Java中使用可插拔架构和各种实现选择的任何安全服务。

服务类型 Provider 保留供安全框架使用。此类服务不能由应用程序添加、移除或修改。以下属性会自动放置在每个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
参见:
  • Constructor Details

    • Provider

      @Deprecated(since="9") protected Provider(String name, double version, String info)
      Deprecated.
      使用指定的名称、版本号和信息构造一个 Provider。调用此构造函数等效于调用 Provider(String, String, String),其中 name 名称,Double.toString(version),和 info
      参数:
      name - 提供者名称。
      version - 提供者版本号。
      info - 提供者及其服务的描述。
    • Provider

      protected Provider(String name, String versionStr, String info)
      使用指定的名称、版本字符串和信息构造一个 Provider

      版本字符串包含一个版本号,可选地后跟由“+”、“-”中的一个字符分隔的其他信息。版本号的格式为:

           ^[0-9]+(\.[0-9]+)*
       

      为了将版本号返回为双精度浮点数,当有两个以上组件(由上述定义的“.”分隔)时,仅保留前两个组件。然后将生成的字符串传递给 Double.valueOf(String) 以生成版本号,即 getVersion()

      如果转换失败,将使用值 0。

      参数:
      name - 提供者名称。
      versionStr - 提供者版本字符串。
      info - 提供者及其服务的描述。
      自 JDK 版本:
      9
  • Method Details

    • configure

      public Provider configure(String configArg)
      将提供的配置参数应用于此 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

      public String getName()
      返回此Provider的名称。
      返回:
      Provider的名称。
    • getVersion

      @Deprecated(since="9") public double getVersion()
      Deprecated.
      use getVersionStr() instead.
      返回此Provider的版本号。
      返回:
      Provider的版本号。
    • getVersionStr

      public String getVersionStr()
      返回此Provider的版本字符串。
      返回:
      Provider的版本字符串。
      自:
      9
    • getInfo

      public String getInfo()
      返回Provider及其服务的可读描述。可能返回一个带有相关链接的HTML页面。
      返回:
      Provider及其服务的描述。
    • toString

      public String toString()
      返回此Provider的名称和版本字符串。
      覆盖:
      toString 在类 Hashtable<Object,Object>
      返回:
      Provider的名称和版本字符串。
    • clear

      public void clear()
      清除此Provider,使其不再包含用于查找Provider实现的属性。

      如果启用了安全管理器,则会调用其checkSecurityAccess方法,其中字符串为"clearProviderProperties."+name(其中name为提供程序名称),以查看是否可以清除此提供程序。

      指定者:
      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 - 如果从输入流读取时发生错误。
      参见:
    • putAll

      public void putAll(Map<?,?> t)
      将指定Map中的所有映射复制到此Provider中。这些映射将替换此Provider当前具有的任何键的属性。
      指定者:
      putAll 在接口 Map<Object,Object>
      覆盖:
      putAll 在类 Hashtable<Object,Object>
      参数:
      t - 要存储在此映射中的映射
      自:
      1.2
    • entrySet

      public Set<Map.Entry<Object,Object>> entrySet()
      返回包含此Provider中的属性条目的不可修改Set视图。
      指定者:
      entrySet 在接口 Map<Object,Object>
      覆盖:
      entrySet 在类 Hashtable<Object,Object>
      返回:
      包含在此映射中的映射的Set视图
      自:
      1.2
      参见:
    • keySet

      public Set<Object> keySet()
      返回包含此Provider中的属性键的不可修改Set视图。
      指定者:
      keySet 在接口 Map<Object,Object>
      覆盖:
      keySet 在类 Hashtable<Object,Object>
      返回:
      包含在此映射中的键的Set视图
      自:
      1.2
    • values

      public Collection<Object> values()
      返回包含此Provider中的属性值的不可修改Collection视图。
      指定者:
      values 在接口 Map<Object,Object>
      覆盖:
      values 在类 Hashtable<Object,Object>
      返回:
      包含在此映射中的值的Collection视图
      自:
      1.2
    • put

      public Object put(Object key, Object value)
      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

      public Object putIfAbsent(Object key, Object value)
      如果指定的键尚未与值关联(或映射为null),则将其与给定值关联并返回null,否则返回当前值。

      如果启用了安全管理器,则将使用字符串"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供程序名称,以查看是否可以设置此提供程序的属性值。

      参数:
      key - 要关联指定值的键
      value - 要与指定键关联的值
      返回:
      与指定键关联的先前值,如果键没有映射则返回null。(如果实现支持空值,则null返回还可以表示地图先前将null与键关联。)
      抛出:
      SecurityException - 如果存在安全管理器并且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。
      自版本:
      1.8
    • remove

      public Object remove(Object key)
      删除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

      public boolean remove(Object key, Object value)
      仅当指定的键当前映射到指定值时,才删除key条目。

      如果启用了安全管理器,则将使用字符串"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)
      仅当指定的键当前映射到指定值时,才替换key条目。

      如果启用了安全管理器,则将使用字符串"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供程序名称,以查看是否可以设置此提供程序的属性值。

      参数:
      key - 要关联指定值的键
      oldValue - 预期与指定键关联的值
      newValue - 要与指定键关联的值
      返回:
      如果值已被替换则返回true
      抛出:
      SecurityException - 如果存在安全管理器并且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。
      自版本:
      1.8
    • replace

      public Object replace(Object key, Object value)
      仅当指定的键当前映射到某个值时,才替换key条目。

      如果启用了安全管理器,则将使用字符串"putProviderProperty."+name调用其checkSecurityAccess方法,其中name是提供程序名称,以查看是否可以设置此提供程序的属性值。

      参数:
      key - 要关联指定值的键
      value - 要与指定键关联的值
      返回:
      与指定键关联的先前值,如果键没有映射则返回null。(如果实现支持空值,则null返回还可以表示地图先前将null与键关联。)
      抛出:
      SecurityException - 如果存在安全管理器并且其SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值。
      自版本:
      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)方法拒绝访问设置属性值。
      自版本:
      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

      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)
      获取描述此提供程序对此算法或别名的指定类型的实现的服务。如果不存在这样的实现,则此方法返回null。如果有两个匹配的服务,一个是使用putService()添加到此提供程序的,另一个是通过put()添加的,则将返回通过putService()添加的服务。
      参数:
      type - 请求的service的类型(例如,MessageDigest
      algorithm - 请求的不区分大小写的算法名称(或替代别名)(例如,SHA-1
      返回:
      描述此提供程序匹配服务的服务,如果不存在这样的服务则为null
      抛出:
      NullPointerException - 如果type或algorithm为null
      自:
      1.5
    • getServices

      public Set<Provider.Service> getServices()
      获取此Provider支持的所有服务的不可修改集合。
      返回:
      Provider支持的所有服务的不可修改集合
      自:
      1.5
    • putService

      protected void putService(Provider.Service s)
      添加一个服务。如果存在具有相同算法名称的相同类型的服务,并且是使用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

      protected void removeService(Provider.Service s)
      移除先前使用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