模块 java.base

类 Provider

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

public abstract class Provider extends Properties
此类表示 Java 安全 API 的“提供者”,其中提供者实现 Java 安全的部分或全部部分。提供商可能实现的服务包括:
  • 算法(例如 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
参见:
  • 构造方法详细信息

    • Provider

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

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

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

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

      为了以 double 形式返回版本号,当有两个以上的组件时(按上面定义的“.”分隔),只保留前两个组件。然后将生成的字符串传递给 Double.valueOf(String) 以生成版本号,即 getVersion()

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

      参数:
      name - 提供商名称。
      versionStr - 提供程序版本字符串。
      info - 对提供商及其服务的描述。
      自从:
      9
  • 方法详情

    • configure

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

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

      @Deprecated (since ="9") public double getVersion()
      已弃用。
      使用 getVersionStr() 代替。
      返回此 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 实现的设施的属性。

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

      指定者:
      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 对指定map中当前任何键的任何属性。
      指定者:
      putAll 在接口 Map<Object,Object>
      重写:
      putAll 在类 Hashtable<Object,Object>
      参数:
      t - 要存储在此map中的映射
      自从:
      1.2
    • entrySet

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

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

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

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

      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)
      仅当指定键当前映射到指定值时才删除该条目。

      如果启用了安全管理器,则使用字符串 "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) 方法拒绝访问设置属性值。
      自从:
      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) 方法拒绝访问设置属性值。
      自从:
      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 ),则尝试使用给定的映射函数计算其值并将其输入此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

      public Object  getOrDefault(Object  key, Object  defaultValue)
      从接口 Map 复制的描述
      返回指定键映射到的值,如果此map不包含键的映射,则返回 defaultValue
      参数:
      key - 要返回其关联值的键
      defaultValue - 键的默认映射
      返回:
      指定键映射到的值,或者 defaultValue 如果此map不包含键的映射
      自从:
      1.8
    • forEach

      public void forEach(BiConsumer <? super Object ,? super Object > action)
      从接口 Map 复制的描述
      对此map中的每个条目执行给定的操作,直到处理完所有条目或操作引发异常。除非实现类另有指定,否则操作将按照条目集迭代的顺序执行(如果指定了迭代顺序)。操作抛出的异常将传递给调用者。
      参数:
      action - 每个条目要执行的操作
      自从:
      1.8
    • getService

      public Provider.Service  getService(String  type, String  algorithm)
      获取描述此提供者对此算法或别名的指定类型的实现的服务。如果不存在这样的实现,则此方法返回 null 。如果有两项匹配服务,一项使用 putService() 添加到此提供者,一项通过 put() 添加,则返回通过 putService() 添加的服务。
      参数:
      type - 请求的 service 类型(例如 MessageDigest
      algorithm - 所请求服务的不区分大小写的算法名称(或备用别名)(例如,SHA-1
      返回:
      描述此 Provider 的匹配服务的服务或 null(如果不存在此类服务)
      抛出:
      NullPointerException - 如果类型或算法是 null
      自从:
      1.5
    • getServices

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

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

      protected void removeService(Provider.Service  s)
      删除之前使用 putService() 添加的服务。指定的服务已从此 Provider 中删除。 getService() 将不再返回它,并且它的信息将从该提供商的哈希表中删除。

      此外,如果有安全管理器,则使用字符串 "removeProviderProperty."+name 调用其 checkSecurityAccess 方法,其中 name 是提供者名称,以查看是否可以删除此提供者的属性。如果使用 checkSecurityAccess 的默认实现(即未覆盖该方法),则会导致调用具有 SecurityPermission("removeProviderProperty."+name) 权限的安全管理器的 checkPermission 方法。

      参数:
      s - 要删除的服务
      抛出:
      SecurityException - 如果安全管理器存在且其 SecurityManager.checkSecurityAccess(java.lang.String) 方法拒绝访问以删除此提供程序的属性。
      NullPointerException - 如果 s 是 null
      自从:
      1.5