Module java.xml.crypto

Class XMLSignatureFactory

java.lang.Object
javax.xml.crypto.dsig.XMLSignatureFactory

public abstract class XMLSignatureFactory extends Object
从头开始创建XMLSignature对象的工厂,或者从相应的XML表示中取消编组一个XMLSignature对象。

XMLSignatureFactory 类型

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

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

此工厂生成的对象将基于DOM,并遵守DOM机制要求中定义的DOM互操作性要求。请参阅Java安全标准算法名称规范中的XMLSignatureFactory部分,了解标准机制类型的列表。

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

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

实现必须至少支持默认的机制类型:DOM。

请注意,调用者必须使用相同的XMLSignatureFactory实例来创建要生成的特定XMLSignatureXMLStructure。如果使用来自不同提供者或不同机制类型的XMLStructure一起使用,则行为是未定义的。

此工厂创建的XMLStructure可能包含特定于XMLSignature的状态,并且不打算重复使用。

从头开始创建XMLSignatures

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

从XML中取消编组XMLSignatures

或者,可以通过调用unmarshalXMLSignature方法,并传递一个特定于机制的包含XML内容的XMLValidateContext实例来从现有的XML表示中创建一个XMLSignature

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

将XMLSignatures签名并编组为XML

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

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

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

自:
1.6
  • Constructor Details

    • XMLSignatureFactory

      protected XMLSignatureFactory()
      默认构造函数,供子类调用。
  • Method Details

    • getInstance

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

      此方法使用标准的JCA提供者查找机制来定位和实例化所需机制类型的XMLSignatureFactory实现。它遍历注册的安全Provider列表,从最首选的Provider开始。将返回来自支持指定机制的第一个Provider的新XMLSignatureFactory对象。

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

      实现注意事项:
      JDK参考实现还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。这可能与由Security.getProviders()返回的提供程序顺序不同。
      参数:
      mechanismType - XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的XMLSignatureFactory部分,了解标准机制类型的列表。
      返回:
      一个新的XMLSignatureFactory
      抛出:
      NullPointerException - 如果mechanismTypenull
      NoSuchMechanismException - 如果没有Provider支持指定机制的XMLSignatureFactory实现
      参见:
    • getInstance

      public static XMLSignatureFactory getInstance(String mechanismType, Provider provider)
      返回一个支持请求的XML处理机制和表示类型(例如:"DOM")的XMLSignatureFactory,由指定的提供程序提供。请注意,指定的Provider对象不必在提供程序列表中注册。
      参数:
      mechanismType - XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的XMLSignatureFactory部分,了解标准机制类型的列表。
      provider - Provider对象
      返回:
      一个新的XMLSignatureFactory
      抛出:
      NullPointerException - 如果providermechanismTypenull
      NoSuchMechanismException - 如果指定机制的XMLSignatureFactory实现不可从指定的Provider对象获取
      参见:
    • getInstance

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

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

      参数:
      mechanismType - XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的XMLSignatureFactory部分,了解标准机制类型的列表。
      provider - 提供程序的字符串名称
      返回:
      一个新的XMLSignatureFactory
      抛出:
      NoSuchProviderException - 如果指定的提供程序未在安全提供程序列表中注册
      NullPointerException - 如果providermechanismTypenull
      NoSuchMechanismException - 如果指定提供程序中不存在指定机制的XMLSignatureFactory实现
      参见:
    • getInstance

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

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

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

      返回:
      一个新的XMLSignatureFactory
      抛出:
      NoSuchMechanismException - 如果没有Provider支持DOM机制的XMLSignatureFactory实现
      参见:
    • 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列表(可以为空或null
      id - Id(可以为null)
      signatureValueId - SignatureValue Id(可以为null)
      返回:
      一个XMLSignature
      抛出:
      NullPointerException - 如果sinull
      ClassCastException - 如果任何objects不是XMLObject类型
    • newReference

      public abstract Reference newReference(String uri, DigestMethod dm)
      创建一个具有指定URI和摘要方法的Reference
      参数:
      uri - 引用URI(可以为null)
      dm - 摘要方法
      返回:
      一个Reference
      抛出:
      IllegalArgumentException - 如果uri不符合RFC 2396标准
      NullPointerException - 如果dmnull
    • 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的摘要值先前已计算时,此方法很有用。例如,请参阅OASIS-DSS(数字签名服务)规范。

      参数:
      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

      当一个包含此引用的 XMLSignature 被生成时,指定的 transforms(如果非空)将被应用于指定的 result。生成的 Reference 元素的 Transforms 元素设置为 appliedTransformstransforms 的连接。

      参数:
      uri - 引用URI(可以为null
      dm - 摘要方法
      appliedTransforms - 一个已应用的 Transform 列表。该列表进行了防御性复制,以防止后续修改。列表必须至少包含一个条目。
      result - 处理已应用的 appliedTransforms 序列的结果
      transforms - 一个将在生成签名时应用的 Transform 列表。该列表进行了防御性复制,以防止后续修改。可以为null或空。
      type - 引用类型,作为URI(可以为null
      id - 引用ID(可以为null
      返回:
      一个 Reference
      抛出:
      ClassCastException - 如果任何一个列表中的转换(在任一列表中)不是 Transform 类型
      IllegalArgumentException - 如果 uri 不符合 RFC 2396 标准或 appliedTransforms 为空
      NullPointerException - 如果 dmappliedTransformsresultnull
    • newSignedInfo

      public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List<? extends Reference> references)
      使用指定的规范化和签名方法以及一个或多个引用列表创建一个 SignedInfo
      参数:
      cm - 规范化方法
      sm - 签名方法
      references - 一个或多个 Reference 列表。该列表进行了防御性复制,以防止后续修改。
      返回:
      一个 SignedInfo
      抛出:
      ClassCastException - 如果任何一个引用不是 Reference 类型
      IllegalArgumentException - 如果 references 为空
      NullPointerException - 如果任何一个参数为 null
    • newSignedInfo

      public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List<? extends Reference> references, String id)
      使用指定的参数创建一个 SignedInfo
      参数:
      cm - 规范化方法
      sm - 签名方法
      references - 一个或多个 Reference 列表。该列表进行了防御性复制,以防止后续修改。
      id - ID(可以为null
      返回:
      一个 SignedInfo
      抛出:
      ClassCastException - 如果任何一个引用不是 Reference 类型
      IllegalArgumentException - 如果 references 为空
      NullPointerException - 如果 cmsmreferencesnull
    • 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 类型的条目
    • newManifest

      public abstract Manifest newManifest(List<? extends Reference> references)
      创建一个包含指定 Reference 列表的 Manifest
      参数:
      references - 一个或多个 Reference 列表。该列表进行了防御性复制,以防止后续修改。
      返回:
      一个 Manifest
      抛出:
      NullPointerException - 如果 referencesnull
      IllegalArgumentException - 如果 references 为空
      ClassCastException - 如果 references 包含任何不是 Reference 类型的条目
    • newManifest

      public abstract Manifest newManifest(List<? extends Reference> references, String id)
      创建一个包含指定 Reference 列表和可选ID的 Manifest
      参数:
      references - 一个或多个 Reference 列表。该列表进行了防御性复制,以防止后续修改。
      id - ID(可以为null
      返回:
      一个 Manifest
      抛出:
      NullPointerException - 如果 referencesnull
      IllegalArgumentException - 如果 references 为空
      ClassCastException - 如果 references 包含任何不是 Reference 类型的条目
    • newSignatureProperty

      public abstract SignatureProperty newSignatureProperty(List<? extends XMLStructure> content, String target, String id)
      创建一个包含指定 XMLStructure 列表、目标URI和可选ID的 SignatureProperty
      参数:
      content - 一个或多个 XMLStructure 列表。该列表进行了防御性复制,以防止后续修改。
      target - 此属性适用于的签名目标URI
      id - ID(可以为null
      返回:
      一个 SignatureProperty
      抛出:
      NullPointerException - 如果 contenttargetnull
      IllegalArgumentException - 如果 content 为空
      ClassCastException - 如果 content 包含任何不是 XMLStructure 类型的条目
    • newSignatureProperties

      public abstract SignatureProperties newSignatureProperties(List<? extends SignatureProperty> properties, String id)
      创建一个包含指定 SignatureProperty 列表和可选ID的 SignatureProperties
      参数:
      properties - 一个或多个SignatureProperty的列表。该列表进行了防御性复制,以防止后续修改。
      id - id(可以为null
      返回:
      一个SignatureProperties
      抛出:
      NullPointerException - 如果propertiesnull
      IllegalArgumentException - 如果properties为空
      ClassCastException - 如果properties包含任何不属于类型SignatureProperty的条目
    • newDigestMethod

      public abstract DigestMethod newDigestMethod(String algorithm, DigestMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个DigestMethod
      参数:
      algorithm - 标识摘要算法的URI
      params - 算法特定的摘要参数(可以为null
      返回:
      DigestMethod
      抛出:
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • newSignatureMethod

      public abstract SignatureMethod newSignatureMethod(String algorithm, SignatureMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个SignatureMethod
      参数:
      algorithm - 标识签名算法的URI
      params - 算法特定的签名参数(可以为null
      返回:
      SignatureMethod
      抛出:
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • newTransform

      public abstract Transform newTransform(String algorithm, TransformParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个Transform
      参数:
      algorithm - 标识变换算法的URI
      params - 算法特定的变换参数(可以为null
      返回:
      Transform
      抛出:
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • newTransform

      public abstract Transform newTransform(String algorithm, XMLStructure params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个Transform。参数被指定为机制特定的XMLStructure(例如:DOMStructure)。当参数以XML形式存在或没有用于指定参数的标准类时,此方法很有用。
      参数:
      algorithm - 标识变换算法的URI
      params - 从中解组参数的机制特定的XML结构(如果不需要或可选,可以为null
      返回:
      Transform
      抛出:
      ClassCastException - 如果params的类型不适用于此XMLSignatureFactory
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • newCanonicalizationMethod

      public abstract CanonicalizationMethod newCanonicalizationMethod(String algorithm, C14NMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个CanonicalizationMethod
      参数:
      algorithm - 标识规范化算法的URI
      params - 算法特定的规范化参数(可以为null
      返回:
      CanonicalizationMethod
      抛出:
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • newCanonicalizationMethod

      public abstract CanonicalizationMethod newCanonicalizationMethod(String algorithm, XMLStructure params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
      为指定的算法URI和参数创建一个CanonicalizationMethod。参数被指定为机制特定的XMLStructure(例如:DOMStructure)。当参数以XML形式存在或没有用于指定参数的标准类时,此方法很有用。
      参数:
      algorithm - 标识规范化算法的URI
      params - 从中解组参数的机制特定的XML结构(如果不需要或可选,可以为null
      返回:
      CanonicalizationMethod
      抛出:
      ClassCastException - 如果params的类型不适用于此XMLSignatureFactory
      InvalidAlgorithmParameterException - 如果指定的参数不适用于请求的算法
      NoSuchAlgorithmException - 如果找不到指定算法的实现
      NullPointerException - 如果algorithmnull
    • getKeyInfoFactory

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

      public abstract XMLSignature unmarshalXMLSignature(XMLValidateContext context) throws MarshalException
      从机制特定的XMLValidateContext实例中解组一个新的XMLSignature实例。
      参数:
      context - 从中解组签名的机制特定上下文
      返回:
      XMLSignature
      抛出:
      NullPointerException - 如果contextnull
      ClassCastException - 如果context的类型不适用于此工厂
      MarshalException - 如果在解组过程中发生不可恢复的异常
    • unmarshalXMLSignature

      public abstract XMLSignature unmarshalXMLSignature(XMLStructure xmlStructure) throws MarshalException
      从机制特定的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()
      返回一个引用,该引用用于默认解除Reference对象中的URI。
      返回:
      默认URIDereferencer的引用(永不为null