模块  java.xml.crypto
软件包  javax.xml.crypto.dsig

Class XMLSignatureFactory


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

    XMLSignatureFactory类型

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

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

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

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

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

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

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

    此外,由此工厂创建的XMLStructure可能包含特定于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由工厂创建也可以编组到一个XML表示和签名,通过调用sign所述的方法XMLSignature对象并使其特定于机制的XMLSignContext包含签名密钥对象和编组参数(参见DOMSignContext )。 例如:
      DOMSignContext context = new DOMSignContext(privateKey, document);
        signature.sign(context); 
    并发访问

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

    但是,对于此类定义的非静态方法,情况并非如此。 除非特定提供程序另有说明,否则需要同时访问单个XMLSignatureFactory实例的线程应在它们之间进行同步并提供必要的锁定。 每个操作不同XMLSignatureFactory实例的多个线程无需同步。

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

      • XMLSignatureFactory

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

      • getInstance

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

        此方法使用标准JCA提供程序查找机制来定位和实例化所需机制类型的XMLSignatureFactory实现。 它遍历注册安全性列表Provider s,从最受欢迎的Provider 将返回第一个Provider中支持指定机制的新XMLSignatureFactory对象。

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

        Implementation Note:
        JDK Reference Implementation另外使用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()
        返回XMLSignatureFactory ,它支持默认的XML处理机制和表示类型(“DOM”)。

        此方法使用标准JCA提供程序查找机制来定位和实例化默认机制类型的XMLSignatureFactory实现。 它遍历注册安全列表Provider s,从最受欢迎的Provider 将返回第一个支持DOM机制的Provider中的新XMLSignatureFactory对象。

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

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

        public final String getMechanismType()
        返回此 XMLSignatureFactory支持的XML处理机制和表示的类型(例如:“DOM”)。
        结果
        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
        结果
        a 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的摘要值时,此方法很有用。 例如,参见OASIS-DSS (Digital Signature Services)规范。

        参数
        uri - 参考URI(可能是 null
        dm - 摘要方法
        transforms -列表Transform秒。 该列表是防御性复制的,以防止后续修改。 可能是null或为空。
        type - 引用类型,作为URI(可能是 null
        id - 参考ID(可能是 null
        digestValue - 摘要值。 克隆该阵列以防止后续修改。
        结果
        a Reference
        异常
        ClassCastException - 如果 transforms中的任何一个的 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 ,指定的transforms (如果为非null)将应用于指定的result 生成的Transforms元素的Reference元素设置为appliedTransformstransforms的串联。

        参数
        uri - 参考URI(可能是 null
        dm - 摘要方法
        appliedTransforms - 已应用的Transform列表。 该列表是防御性复制的,以防止后续修改。 该列表必须至少包含一个条目。
        result - 处理序列 appliedTransforms
        transforms - 生成签名时要应用的Transform的列表。 该列表是防御性复制的,以防止后续修改。 可能是null或空。
        type - 引用类型,URI(可能是 null
        id - 参考ID(可能是 null
        结果
        a Reference
        异常
        ClassCastException - 如果任何转换(在任一列表中)不是 Transform类型
        IllegalArgumentException - 如果 uri不符合RFC 2396或 appliedTransforms为空
        NullPointerException -如果 dmappliedTransformsresultnull
      • 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相同的机制类型和提供程序。
        结果
        a KeyInfoFactory
        异常
        NoSuchMechanismException - 如果具有相同机制类型和提供程序的 KeyFactory实现不可用
      • unmarshalXMLSignature

        public abstract XMLSignature unmarshalXMLSignature​(XMLStructure xmlStructure)
                                                    throws MarshalException
        解组新的XMLSignature从特定于机制的实例XMLStructure实例。 如果您只想解组(而不是验证) 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