模块  java.base
软件包  java.security

Class Provider

  • 实现的所有接口
    SerializableCloneableMap<Object,​Object>
    已知直接子类:
    AuthProvider

    public abstract class Provider
    extends Properties
    此类表示Java安全API的“提供者”,其中提供者实现Java安全性的部分或全部部分。 提供商可以实施的服务包括:
    • 算法(例如DSA,RSA或SHA-256)。
    • 密钥生成,转换和管理工具(例如特定于算法的密钥)。

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

    请注意,提供程序可用于实现Java中的任何安全服务,该服务使用可插入体系结构,并且可以选择适合下面的实现。

    服务类型Provider保留供安全框架使用。 应用程序无法添加,删除或修改此类服务。 以下属性自动放置在每个Provider对象中:

    Attributes Automatically Placed in a Provider Object 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()方法提供。 配置和安装安全提供程序的机制是特定于实现的。

    Implementation Note:
    JDK实现支持通过Java安装目录中的conf/security/java.security文件对安全提供程序进行静态注册。 这些提供程序由JDK运行时自动安装,请参阅Java加密体系结构(JCA)参考指南中的The Provider Class ,以获取有关特定类型的提供程序,加密服务提供程序如何工作和安装的信息。
    从以下版本开始:
    1.1
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • Provider

        protected Provider​(String name,
                           String versionStr,
                           String info)
        构造具有指定名称,版本字符串和信息的提供程序。

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

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

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

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

        参数
        name - 提供者名称。
        versionStr - 提供程序版本字符串。
        info - 提供者及其服务的描述。
        从以下版本开始:
        9
    • 方法详细信息

      • configure

        public Provider configure​(String configArg)
        将提供的配置参数应用于此提供程序实例,并返回配置的提供程序。 请注意,如果无法就地配置此提供程序,则将创建并返回新的提供程序。 因此,调用者应始终使用返回的提供者。
        实现要求:
        默认实现抛出UnsupportedOperationException 仅当支持配置参数时,子类才应覆盖此方法。
        参数
        configArg - 用于配置此提供程序的配置信息。
        结果
        使用提供的配置参数配置的提供程序。
        异常
        UnsupportedOperationException - 如果不支持配置参数。
        NullPointerException - 如果提供的配置参数为null。
        InvalidParameterException - 如果提供的配置参数无效。
        从以下版本开始:
        9
      • isConfigured

        public boolean isConfigured()
        检查是否已配置此提供程序实例。
        实现要求:
        默认实现返回true。 如果提供程序实例在构造后需要显式调用configure则子类应重写此方法。
        结果
        如果不需要进一步配置,则为true,否则为false。
        从以下版本开始:
        9
      • getName

        public String getName()
        返回此提供程序的名称。
        结果
        此提供商的名称。
      • getVersion

        @Deprecated(since="9")
        public double getVersion()
        Deprecated.
        use getVersionStr() instead.
        返回此提供程序的版本号。
        结果
        此提供程序的版本号。
      • getVersionStr

        public String getVersionStr()
        返回此提供程序的版本字符串。
        结果
        此提供程序的版本字符串。
        从以下版本开始:
        9
      • getInfo

        public String getInfo()
        返回提供程序及其服务的可读描述。 这可能会返回带有相关链接的HTML页面。
        结果
        提供者及其服务的描述。
      • toString

        public String toString()
        返回一个字符串,其中包含此提供程序的名称和版本字符串。
        重写:
        toString在课程 Hashtable<Object,​Object>
        结果
        包含该提供程序的名称和版本字符串的字符串。
      • clear

        public void clear()
        清除此提供程序,使其不再包含用于查找提供程序实现的工具的属性。

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

        Specified by:
        clear在界面 Map<Object,​Object>
        重写:
        clear在类 Hashtable<Object,​Object>
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以清除此提供程序
        从以下版本开始:
        1.2
      • putAll

        public void putAll​(Map<?,​?> t)
        将指定Map中的所有映射复制到此提供程序。 这些映射将替换此提供程序对当前位于指定Map中的任何键的所有属性。
        Specified by:
        putAll in interface Map<Object,​Object>
        重写:
        putAll在课程 Hashtable<Object,​Object>
        参数
        t - 要存储在此映射中的映射
        从以下版本开始:
        1.2
      • keySet

        public Set<Object> keySet()
        返回此提供程序中包含的属性键的不可修改的Set视图。
        Specified by:
        keySet ,界面 Map<Object,​Object>
        重写:
        keySet在课程 Hashtable<Object,​Object>
        结果
        此映射中包含的键的设置视图
        从以下版本开始:
        1.2
      • putIfAbsent

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

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

        参数
        key - 与指定值关联的键
        value - 要与指定键关联的值
        结果
        与指定键关联的先前值,如果没有键的映射, null (返回null也可以指示先前与关键字相关的地图null ,如果实现支持空值。)
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问set属性值。
        从以下版本开始:
        1.8
      • remove

        public Object remove​(Object key)
        删除key属性(及其对应的value )。

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

        Specified by:
        remove在界面 Map<Object,​Object>
        重写:
        remove in class 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)方法拒绝访问set属性值。
        从以下版本开始:
        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)方法拒绝访问set属性值。
        从以下版本开始:
        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)方法拒绝访问set属性值。
        从以下版本开始:
        1.8
      • compute

        public Object compute​(Object key,
                              BiFunction<? super Object,​? super Object,​? extends Object> remappingFunction)
        尝试计算指定键及其当前映射值的映射(如果没有当前映射, null )。

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

        Specified by:
        compute接口 Map<Object,​Object>
        重写:
        compute在课程 Hashtable<Object,​Object>
        参数
        key - 与指定值关联的键
        remappingFunction - 用于计算值的重映射函数
        结果
        与指定键关联的新值,如果没有,则返回null
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问set属性值或删除属性。
        从以下版本开始:
        1.8
      • computeIfAbsent

        public Object computeIfAbsent​(Object key,
                                      Function<? super Object,​? extends Object> mappingFunction)
        如果指定的键尚未与值关联(或映射到null ),则尝试使用给定的映射函数计算其值并将其输入此映射,除非null

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

        Specified by:
        computeIfAbsent in interface Map<Object,​Object>
        重写:
        computeIfAbsent在课程 Hashtable<Object,​Object>
        参数
        key - 与指定值关联的键
        mappingFunction - 计算值的映射函数
        结果
        与指定键关联的当前(现有或已计算)值,如果计算值为null,则为null
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问set属性值并删除属性。
        从以下版本开始:
        1.8
      • computeIfPresent

        public Object computeIfPresent​(Object key,
                                       BiFunction<? super Object,​? super Object,​? extends Object> remappingFunction)
        如果指定键的值存在且为非null,则尝试在给定键及其当前映射值的情况下计算新映射。

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

        Specified by:
        computeIfPresent in interface 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是提供程序名称,以查看是否可以设置此提供程序的属性值并删除此提供程序的属性。

        Specified by:
        merge接口 Map<Object,​Object>
        重写:
        merge在课程 Hashtable<Object,​Object>
        参数
        key - 与结果值关联的键
        value - 要与与键关联的现有值合并的非空值,或者,如果没有现有值或与键关联的空值,则与键关联
        remappingFunction - 重新计算值的重新映射函数(如果存在)
        结果
        与指定键关联的新值,如果没有值与键关联,则返回null
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问set属性值或删除属性。
        从以下版本开始:
        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)
        获取描述此Provider的此算法或别名的指定类型的实现的服务。 如果不存在此类实现,则此方法返回null。 如果有两个匹配服务,一个使用putService()添加到此提供程序,另一个通过put()添加,则返回通过putService()添加的服务。
        参数
        type - 请求的类型service (例如, MessageDigest
        algorithm - 请求的服务的不区分大小写的算法名称(或备用别名)(例如, SHA-1
        结果
        描述此Provider的匹配服务的服务,如果不存在此类服务,则为null
        异常
        NullPointerException - 如果类型或算法为null
        从以下版本开始:
        1.5
      • getServices

        public Set<Provider.Service> getServices()
        获取此提供商支持的所有服务的不可修改的集合。
        结果
        此提供商支持的所有服务的不可修改的集合
        从以下版本开始:
        1.5
      • putService

        protected void putService​(Provider.Service s)
        添加服务。 如果存在具有相同算法名称的相同类型的服务并且使用putService()添加它,则它将被新服务替换。 此方法还以Java Cryptography Architecture (JCA) Reference Guide中描述的格式将有关此服务的信息放在提供程序的Hashtable值中。

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

        参数
        s - 要添加的服务
        异常
        SecurityException - 如果存在安全管理器且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问set属性值。
        NullPointerException - 如果s为null
        从以下版本开始:
        1.5
      • removeService

        protected void removeService​(Provider.Service s)
        删除以前使用putService()添加的服务。 将从此提供程序中删除指定的服务。 它将不再由getService()返回,其信息将从该提供商的Hashtable中删除。

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

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