Module  java.xml.crypto
软件包  javax.xml.crypto.dsig

Class XMLSignatureFactory



  • public abstract class XMLSignatureFactory
    extends Object
    用于从头开始创建XMLSignature对象的工厂,或从相应的XML表示中解组XMLSignature对象。

    XMLSignatureFactory类型

    XMLSignatureFactory每个实例XMLSignatureFactory支持特定的XML机制类型。 要创建一个XMLSignatureFactory ,请调用静态的getInstance方法之一,传递所需的XML机制类型,例如:

    XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");

    该工厂生产的对象将基于DOM,并遵守API概述的DOM Mechanism Requirements部分中定义的DOM互操作性要求。 有关标准机制类型的列表,请参阅API概述的Service Providers部分。

    XMLSignatureFactory实现使用Provider机制进行注册和加载。 例如,支持DOM机制的服务提供者将在Provider子类中指定为:

      put("XMLSignatureFactory.DOM", "org.example.DOMXMLSignatureFactory"); 

    实现必须最低限度地支持默认机制类型:DOM。

    注意,调用者必须使用相同XMLSignatureFactory实例创建XMLStructure个特定的XMLSignature即产生。 如果来自不同提供商的XMLStructure s或不同机制类型一起使用,行为是未定义的。

    此外,由该工厂创建的XMLStructure s可能包含特定于XMLSignature状态,并不意图重复使用。

    从头创建XMLSignatures

    一旦创建了XMLSignatureFactory ,可以通过调用相应的方法来实例化对象。 例如,可以通过调用newReference方法之一来创建一个Reference实例。

    从XML解组XMLSignatures

    可替代地,一个XMLSignature可以从现有的XML表示通过调用创建unmarshalXMLSignature方法并传递它的特定机制- XMLValidateContext包含XML内容实例:

      DOMValidateContext context = new DOMValidateContext(key, signatureElement);
     XMLSignature signature = factory.unmarshalXMLSignature(context); 
    每个XMLSignatureFactory必须支持所需的XMLValidateContext类型的工厂类型,但可能支持其他。 DOM XMLSignatureFactory必须支持DOMValidateContext对象。

    将XMLSignatures签名和编组为XML

    工厂创建的每个XMLSignature也可以通过调用XMLSignature对象的sign方法并传递给包含签名密钥和编组参数的机制特定的XMLSignContext对象(见DOMSignContext ),将其编组为XML表示并签名。 例如:
      DOMSignContext context = new DOMSignContext(privateKey, document);
        signature.sign(context); 
    并发访问

    该类的静态方法保证线程安全。 多个线程可以同时调用此类中定义的静态方法,而不会产生不良影响。

    但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个XMLSignatureFactory实例的线程应在XMLSignatureFactory同步并提供必要的锁定。 多个线程每个操作不同的XMLSignatureFactory实例不需要同步。

    从以下版本开始:
    1.6
    • 构造方法详细信息

      • XMLSignatureFactory

        protected XMLSignatureFactory​()
        默认构造函数,用于由子类调用。
    • 方法详细信息

      • getInstance

        public static XMLSignatureFactory getInstance​(String mechanismType)
        返回支持指定的XML处理机制和表示类型(例如:“DOM”)的XMLSignatureFactory

        此方法使用标准的JCA提供查找机制来查找并实例化XMLSignatureFactory实现期望的机构的类型。 它通过注册安全性列表Provider s,从最优选的Provider 从第Provider新的XMLSignatureFactory对象中返回支持指定的机制。

        请注意,注册提供商的列表可以通过Security.getProviders()方法检索。

        Implementation Note:
        JDK参考实现另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        参数
        mechanismType - XML处理机制和表示的类型。 有关标准机制类型的列表,请参阅API概述的Service Providers部分。
        结果
        一个新的 XMLSignatureFactory
        异常
        NullPointerException - 如果 mechanismTypenull
        NoSuchMechanismException - 如果否 Provider支持指定机制的 XMLSignatureFactory实现
        另请参见:
        Provider
      • getInstance

        public static XMLSignatureFactory getInstance​(String mechanismType,
                                                      Provider provider)
        返回一个XMLSignatureFactory ,它支持由指定的提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。 请注意,指定的Provider对象不必在提供者列表中注册。
        参数
        mechanismType - XML处理机制和表示的类型。 有关标准机制类型的列表,请参阅API概述的Service Providers部分。
        provider - Provider对象
        结果
        一个新的 XMLSignatureFactory
        异常
        NullPointerException - 如果 providermechanismTypenull
        NoSuchMechanismException - 如果指定机制的 XMLSignatureFactory实现从指定的 Provider对象中不可用
        另请参见:
        Provider
      • getInstance

        public static XMLSignatureFactory getInstance​(String mechanismType,
                                                      String provider)
                                               throws NoSuchProviderException
        返回一个XMLSignatureFactory ,它支持由指定提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。 指定的提供者必须在安全提供程序列表中注册。

        请注意,注册提供商的列表可以通过Security.getProviders()方法检索。

        参数
        mechanismType - XML处理机制和表示的类型。 有关标准机制类型的列表,请参阅API概述的Service Providers部分。
        provider - 提供者的字符串名称
        结果
        一个新的 XMLSignatureFactory
        异常
        NoSuchProviderException - 如果指定的提供程序未在安全提供程序列表中注册
        NullPointerException - 如果 providermechanismTypenull
        NoSuchMechanismException - 如果指定机制的 XMLSignatureFactory实现不能从指定的提供者
        另请参见:
        Provider
      • getInstance

        public static XMLSignatureFactory getInstance​()
        返回支持默认XML处理机制和表示类型(“DOM”)的XMLSignatureFactory

        该方法使用标准的JCA提供程序查找机制来定位和实例化一个默认机制类型的一个XMLSignatureFactory实现。 它通过注册安全性列表Provider s,从最优选的Provider XMLSignatureFactory从第一对象Provider返回支持DOM机制。

        请注意,可以通过Security.getProviders()方法检索已注册提供商的列表。

        结果
        一个新的 XMLSignatureFactory
        异常
        NoSuchMechanismException - 如果没有 Provider支持DOM机制的 XMLSignatureFactory实现
        另请参见:
        Provider
      • getMechanismType

        public final String getMechanismType​()
        返回此 XMLSignatureFactory (例如:“DOM”)支持的XML处理机制和表示的类型。
        结果
        XMLSignatureFactory支持的XML处理机制类型
      • getProvider

        public final Provider getProvider​()
        返回此 XMLSignatureFactory的提供者。
        结果
        这个 XMLSignatureFactory的提供者
      • newXMLSignature

        public abstract XMLSignature newXMLSignature​(SignedInfo si,
                                                     KeyInfo ki)
        创建一个 XMLSignature并使用指定的 SignedInfoKeyInfo对象的内容进行初始化。
        参数
        si - 签名的信息
        ki - 关键信息(可能是 null
        结果
        一个 XMLSignature
        异常
        NullPointerException - 如果 sinull
      • newXMLSignature

        public abstract XMLSignature newXMLSignature​(SignedInfo si,
                                                     KeyInfo ki,
                                                     List<? extends XMLObject> objects,
                                                     String id,
                                                     String signatureValueId)
        创建一个 XMLSignature并用指定的参数进行初始化。
        参数
        si - 签名信息
        ki - 关键信息(可能是 null
        objects -列表XMLObject S(可能是空的或null
        id - Id(可能是 null
        signatureValueId - SignatureValue Id(可能是 null
        结果
        一个 XMLSignature
        异常
        NullPointerException - 如果 sinull
        ClassCastException - 如果任何 objects不是类型 XMLObject
      • newReference

        public abstract Reference newReference​(String uri,
                                               DigestMethod dm,
                                               List<? extends Transform> transforms,
                                               String type,
                                               String id)
        创建具有指定参数的 Reference
        参数
        uri -基准URI(可以是 null
        dm - 摘要方法
        transforms -列表Transform秒。 该列表被防御复制以防止后续修改。 可能是null或空。
        type - 引用类型,作为URI(可以是 null
        id -参考ID(可以是 null
        结果
        一个 Reference
        异常
        ClassCastException - 如果任何 transforms不是类型 Transform
        IllegalArgumentException - 如果 uri不符合RFC 2396标准
        NullPointerException - 如果 dmnull
      • newReference

        public abstract Reference newReference​(String uri,
                                               DigestMethod dm,
                                               List<? extends Transform> transforms,
                                               String type,
                                               String id,
                                               byte[] digestValue)
        创建具有指定参数的Reference和预先计算的摘要值。

        Reference前已计算Reference的摘要值时,此方法很有用。 参见例如, OASIS-DSS (Digital Signature Services)规范。

        参数
        uri - 参考URI(可能为 null
        dm - 摘要方法
        transforms -列表Transform秒。 该列表被防御复制以防止后续修改。 可能是null或空。
        type - 引用类型,作为URI(可以是 null
        id - 参考ID(可能为 null
        digestValue - 摘要值。 克隆阵列以防止后续修改。
        结果
        一个 Reference
        异常
        ClassCastException - 如果任何一个 transforms不是类型 Transform
        IllegalArgumentException - 如果 uri不符合RFC 2396标准
        NullPointerException - 如果 dmdigestValuenull
      • newReference

        public abstract Reference newReference​(String uri,
                                               DigestMethod dm,
                                               List<? extends Transform> appliedTransforms,
                                               Data result,
                                               List<? extends Transform> transforms,
                                               String type,
                                               String id)
        使用指定的参数创建一个Reference

        当转换列表已应用于Reference时,此方法很有用。 参见例如, OASIS-DSS (Digital Signature Services)规范。

        XMLSignature包含该引用的XMLSignature ,指定的transforms (如果非空)将应用于指定的result 所述Transforms所得的元件Reference元件被设置到的级联appliedTransformstransforms

        参数
        uri - 参考URI(可以是 null
        dm - 摘要方法
        appliedTransforms - 已经应用的Transform的列表。 该列表被防御复制以防止后续修改。 该列表必须至少包含一个条目。
        result - 处理 appliedTransforms序列的 appliedTransforms
        transforms - 生成签名时要应用的Transform的列表。 该列表被防御复制以防止后续修改。 可能是null或空。
        type - 引用类型,作为URI(可以是 null
        id - 参考ID(可能为 null
        结果
        一个 Reference
        异常
        ClassCastException - 如果任何一个变换(在任一列表中)不是类型 Transform
        IllegalArgumentException - 如果 uri不符合RFC 2396或 appliedTransforms为空
        NullPointerException -如果 dmappliedTransforms或者 resultnull
      • newXMLObject

        public abstract XMLObject newXMLObject​(List<? extends XMLStructure> content,
                                               String id,
                                               String mimeType,
                                               String encoding)
        从指定的参数创建一个 XMLObject
        参数
        content -列表XMLStructure秒。 该列表被防御复制以防止后续修改。 可能是null或空。
        id -的Id(可以是 null
        mimeType - mime类型(可能是 null
        encoding - 编码(可能是 null
        结果
        一个 XMLObject
        异常
        ClassCastException - 如果content包含任何不是XMLStructure类型的条目
      • getKeyInfoFactory

        public final KeyInfoFactory getKeyInfoFactory​()
        返回KeyInfoFactory创建KeyInfo对象。 返回的KeyInfoFactory具有与此XMLSignatureFactory相同的机制类型和提供商。
        结果
        一个 KeyInfoFactory
        异常
        NoSuchMechanismException - 如果具有相同机制类型和提供程序的 KeyFactory实现不可用
      • unmarshalXMLSignature

        public abstract XMLSignature unmarshalXMLSignature​(XMLStructure xmlStructure)
                                                    throws MarshalException
        解组新的XMLSignature从特定于机制的实例XMLStructure实例。 如果您只想XMLSignature (而不是验证) XMLSignature此方法很有用。
        参数
        xmlStructure - 从其中解组签名的机制特定的XML结构
        结果
        XMLSignature
        异常
        NullPointerException - 如果 xmlStructurenull
        ClassCastException -如果类型 xmlStructure不适合此工厂
        MarshalException - 如果在解组期间发生不可恢复的异常
      • isFeatureSupported

        public abstract boolean isFeatureSupported​(String feature)
        指示是否支持指定的功能。
        参数
        feature - 功能名称(作为绝对URI)
        结果
        true如果支持指定功能, false否则
        异常
        NullPointerException - 如果 featurenull
      • getURIDereferencer

        public abstract URIDereferencer getURIDereferencer​()
        返回对URIDereferencer引用,默认情况下,它用于取消引用Reference对象中的URI。
        结果
        参考默认 URIDereferencer (从不 null