类 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 s。如果来自不同提供者或不同机制类型的 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
  • 构造方法详细信息

    • XMLSignatureFactory

      protected XMLSignatureFactory()
      默认构造方法,供子类调用。
  • 方法详情

    • 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)
      返回一个 XMLSignatureFactory 支持请求的 XML 处理机制和表示类型(例如:“DOM”),由指定的提供者提供。请注意,指定的 Provider 对象不必在提供者列表中注册。
      参数:
      mechanismType - XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的 XMLSignatureFactory 部分。
      provider - Provider 对象
      返回:
      一个新的XMLSignatureFactory
      抛出:
      NullPointerException - 如果 providermechanismTypenull
      NoSuchMechanismException - 如果无法从指定的 Provider 对象获得指定机制的 XMLSignatureFactory 实现
      参见:
    • getInstance

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

      请注意,可以通过 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

      当转换列表已应用于 Reference 时,此方法很有用。例如,参见 OASIS-DSS(数字签名服务) 规范。

      当生成包含此引用的 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)
      创建一个 Manifest 包含指定的 Reference 列表。
      参数:
      references - 一个或多个 Reference 的列表。该列表被防御性复制以防止后续修改。
      返回:
      Manifest
      抛出:
      NullPointerException - 如果 referencesnull
      IllegalArgumentException - 如果 references 是空的
      ClassCastException - 如果 references 包含任何非 Reference 类型的条目
    • newManifest

      public abstract Manifest  newManifest(List <? extends Reference > references, String  id)
      创建一个 Manifest 包含指定的 Reference 列表和可选的 id。
      参数:
      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)
      创建一个 SignatureProperty 包含指定的 XMLStructure 列表、目标 URI 和可选 ID。
      参数:
      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)
      创建一个 SignatureProperties 包含指定的 SignatureProperty 列表和可选的 id。
      参数:
      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()
      返回对 URIDereferencer 的引用,默认情况下用于取消引用 Reference 对象中的 URI。
      返回:
      对默认 URIDereferencer 的引用(从不 null