Module  java.base
软件包  java.security

Class Provider

  • All Implemented Interfaces:
    SerializableCloneableMap<Object,Object>
    已知直接子类:
    AuthProvider


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

    一些提供者实现在其操作期间可能会遇到不可恢复的内部错误,例如无法与安全令牌进行通信。 A 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的文件。 安全提供商通过ServiceLoader机制查询,使用application class loader

    提供商可以被配置为使得它们在运行时通过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.valueOf(String)生成版本号,即getVersion()

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

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

      • configure

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

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

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

        @Deprecated(since="9")
        public double getVersion​()
        已过时。 改用getVersionStr()
        返回此提供商的版本号。
        结果
        该提供商的版本号。
      • getVersionStr

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

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

        public String toString​()
        返回一个带有该提供者的名称和版本字符串的字符串。
        重写:
        toStringProperties
        结果
        该字符串具有此提供程序的名称和版本字符串。
      • clear

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

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

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

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

        public Set<Object> keySet​()
        返回此提供程序中包含的属性键的不可修改的Set视图。
        Specified by:
        keySet在接口 Map<Object,Object>
        重写:
        keySetProperties
        结果
        该地图中包含的键的集合视图
        从以下版本开始:
        1.2
      • values

        public Collection<Object> values​()
        返回此提供程序中包含的属性值的不可修改的集合视图。
        Specified by:
        values在接口 Map<Object,Object>
        重写:
        values中的 Properties
        结果
        该地图中包含的值的集合视图
        从以下版本开始:
        1.2
      • putIfAbsent

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

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

        Specified by:
        putIfAbsent在接口 Map<Object,Object>
        重写:
        putIfAbsentProperties
        参数
        key - 指定值与之关联的键
        value - 与指定键相关联的值
        结果
        与指定键相关联的上一个值,如果没有键的映射, null (A null返回也可以指示该映射以前关联的是null的关键字,如果实现支持空值)。
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝对设置属性值的访问。
        从以下版本开始:
        1.8
      • remove

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

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

        Specified by:
        remove在接口 Map<Object,Object>
        重写:
        removeProperties
        参数
        key - 需要删除的关键
        结果
        密钥映射到此散列表中的值,如果密钥没有映射, null
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以删除此提供程序的属性。
        从以下版本开始:
        1.2
      • remove

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

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

        Specified by:
        remove在接口 Map<Object,Object>
        重写:
        removeProperties
        参数
        key - 与指定值相关联的键
        value - 预期与指定键相关联的值
        结果
        true如果该值被删除
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问以删除此提供程序的属性。
        从以下版本开始:
        1.8
      • replace

        public boolean replace​(Object key,
                               Object oldValue,
                               Object newValue)
        仅当当前映射到指定的值时,才能替换指定键的条目。

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

        Specified by:
        replace在接口 Map<Object,Object>
        重写:
        replaceProperties
        参数
        key - 与指定值相关联的键
        oldValue - 预期与指定键相关联的值
        newValue - 要与指定键相关联的值
        结果
        true如果该值被替换
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝对设置属性值的访问。
        从以下版本开始:
        1.8
      • replace

        public Object replace​(Object key,
                              Object value)
        只有当目标映射到某个值时,才能替换指定键的条目。

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

        Specified by:
        replace在接口 Map<Object,Object>
        重写:
        replaceProperties
        参数
        key - 与指定值相关联的键
        value - 与指定键相关联的值
        结果
        与指定键相关联的上一个值,如果没有键的映射, null (A null返回也可以表示该地图以前关联的是null的关键字,如果实现支持空值)。
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝对设置属性值的访问。
        从以下版本开始:
        1.8
      • replaceAll

        public void replaceAll​(BiFunction<? super Object,? super Object,? extends Object> function)
        用条目集迭代器返回的顺序,直到所有的条目都被处理或函数抛出一个异常,替换每个条目的值,结果是对该条目调用给定的函数。

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

        Specified by:
        replaceAll在接口 Map<Object,Object>
        重写:
        replaceAllProperties
        参数
        function - 应用于每个条目的功能
        异常
        SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝对设置属性值的访问。
        从以下版本开始:
        1.8
      • compute

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

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

        Specified by:
        compute在接口 Map<Object,Object>
        重写:
        computeProperties
        参数
        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

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

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

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

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

        Specified by:
        computeIfPresent在接口 Map<Object,Object>
        重写:
        computeIfPresentProperties
        参数
        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关联,则将其与给定值相关联。 否则,将该值替换为给定重映射函数的结果,如果结果为空,则将其移除。 当组合键的多个映射值时,该方法可能是有用的。

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

        Specified by:
        merge在接口 Map<Object,Object>
        重写:
        mergeProperties
        参数
        key - 结合值与之关联的键
        value - 要与与密钥相关联的现有值合并的非空值,或者如果没有现有值或空值与密钥相关联,则与密钥相关联
        remappingFunction - 如果存在重新计算值的重映射功能
        结果
        与指定键相关联的新值,如果没有值与该键相关联,则返回null
        异常
        SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkSecurityAccess(java.lang.String)方法拒绝访问设置属性值或删除属性。
        从以下版本开始:
        1.8
      • get

        public Object get​(Object key)
        描述从类别复制: Hashtable
        返回指定键映射到的值,如果此映射不包含键的映射,则返回null

        更正式地,如果这个地图包含一个k键到一个值v的映射,这样(key.equals(k)) ,那么这个方法返回v ; 否则返回null (最多可以有一个这样的映射。)

        Specified by:
        get在接口 Map<Object,Object>
        重写:
        getProperties
        参数
        key - 要返回其关联值的键
        结果
        映射指定键的值,如果此映射不包含该键的映射, null
        另请参见:
        Hashtable.put(Object, Object)
      • getOrDefault

        public Object getOrDefault​(Object key,
                                   Object defaultValue)
        说明从接口Map复制
        返回指定键映射到的值,如果此映射不包含该键的映射,则返回 defaultValue
        Specified by:
        getOrDefault在接口 Map<Object,Object>
        重写:
        getOrDefault中的 Properties
        参数
        key - 要返回其关联值的键
        defaultValue - 键的默认映射
        结果
        映射指定键的值,如果此映射不包含该键的映射, defaultValue
        从以下版本开始:
        1.8
      • forEach

        public void forEach​(BiConsumer<? super Object,? super Object> action)
        说明从界面Map复制
        对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。 除非实现类另有指定,否则按照进入设置迭代的顺序执行操作(如果指定了迭代顺序)。操作引发的异常被转发给调用者。
        Specified by:
        forEach在接口 Map<Object,Object>
        重写:
        forEachProperties
        参数
        action - 为每个条目执行的操作
        从以下版本开始:
        1.8
      • getService

        public Provider.Service getService​(String type,
                                           String algorithm)
        获取描述此提供程序实现该算法或别名的指定类型的服务。 如果没有这样的实现,这个方法返回null。 如果有两个匹配的服务,一个添加到这个提供商使用putService()和一个通过put()添加,通过putService()添加的服务被返回。
        参数
        type - 请求的类型service (例如, MessageDigest
        algorithm - 请求的服务的不区分大小写的算法名称(或替代别名)(例如, SHA-1
        结果
        描述此提供商的匹配服务的服务,如果不存在此类服务,则为null
        异常
        NullPointerException - 如果类型或算法为空
        从以下版本开始:
        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值中。

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

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

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

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

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