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 实例来创建要生成的特定 XMLSignature 的 XMLStructure 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
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述static XMLSignatureFactory返回一个支持默认 XML 处理机制和表示类型(“DOM”)的XMLSignatureFactory。static XMLSignatureFactorygetInstance(String mechanismType) 返回支持指定 XML 处理机制和表示类型(例如:“DOM”)的XMLSignatureFactory。static XMLSignatureFactorygetInstance(String mechanismType, String provider) 返回一个XMLSignatureFactory支持请求的 XML 处理机制和表示类型(例如:“DOM”),由指定的提供者提供。static XMLSignatureFactorygetInstance(String mechanismType, Provider provider) 返回一个XMLSignatureFactory支持请求的 XML 处理机制和表示类型(例如:“DOM”),由指定的提供者提供。final KeyInfoFactory返回创建KeyInfo对象的KeyInfoFactory。final String返回此XMLSignatureFactory支持的 XML 处理机制和表示的类型(例如:“DOM”)。final Provider返回此XMLSignatureFactory的提供者。abstract URIDereferencer返回对URIDereferencer的引用,默认情况下用于取消引用Reference对象中的 URI。abstract booleanisFeatureSupported(String feature) 指示是否支持指定的功能。abstract CanonicalizationMethodnewCanonicalizationMethod(String algorithm, C14NMethodParameterSpec params) 为指定的算法 URI 和参数创建一个CanonicalizationMethod。abstract CanonicalizationMethodnewCanonicalizationMethod(String algorithm, XMLStructure params) 为指定的算法 URI 和参数创建一个CanonicalizationMethod。abstract DigestMethodnewDigestMethod(String algorithm, DigestMethodParameterSpec params) 为指定的算法 URI 和参数创建一个DigestMethod。abstract ManifestnewManifest(List<? extends Reference> references) 创建一个Manifest包含指定的Reference列表。abstract ManifestnewManifest(List<? extends Reference> references, String id) 创建一个Manifest包含指定的Reference列表和可选的 id。abstract ReferencenewReference(String uri, DigestMethod dm) 使用指定的 URI 和摘要方法创建一个Reference。abstract ReferencenewReference(String uri, DigestMethod dm, List<? extends Transform> transforms, String type, String id) 使用指定参数创建Reference。abstract ReferencenewReference(String uri, DigestMethod dm, List<? extends Transform> transforms, String type, String id, byte[] digestValue) 使用指定的参数和预先计算的摘要值创建一个Reference。abstract ReferencenewReference(String uri, DigestMethod dm, List<? extends Transform> appliedTransforms, Data result, List<? extends Transform> transforms, String type, String id) 使用指定参数创建Reference。abstract SignatureMethodnewSignatureMethod(String algorithm, SignatureMethodParameterSpec params) 为指定的算法 URI 和参数创建一个SignatureMethod。abstract SignaturePropertiesnewSignatureProperties(List<? extends SignatureProperty> properties, String id) 创建一个SignatureProperties包含指定的SignatureProperty列表和可选的 id。abstract SignaturePropertynewSignatureProperty(List<? extends XMLStructure> content, String target, String id) 创建一个SignatureProperty包含指定的XMLStructure列表、目标 URI 和可选 ID。abstract SignedInfonewSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List<? extends Reference> references) 使用指定的规范化和签名方法以及一个或多个引用的列表创建一个SignedInfo。abstract SignedInfonewSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List<? extends Reference> references, String id) 使用指定参数创建SignedInfo。abstract TransformnewTransform(String algorithm, TransformParameterSpec params) 为指定的算法 URI 和参数创建一个Transform。abstract TransformnewTransform(String algorithm, XMLStructure params) 为指定的算法 URI 和参数创建一个Transform。abstract XMLObjectnewXMLObject(List<? extends XMLStructure> content, String id, String mimeType, String encoding) 从指定的参数创建一个XMLObject。abstract XMLSignaturenewXMLSignature(SignedInfo si, KeyInfo ki) 创建一个XMLSignature并使用指定的SignedInfo和KeyInfo对象的内容对其进行初始化。abstract XMLSignaturenewXMLSignature(SignedInfo si, KeyInfo ki, List<? extends XMLObject> objects, String id, String signatureValueId) 创建一个XMLSignature并使用指定的参数对其进行初始化。abstract XMLSignatureunmarshalXMLSignature(XMLValidateContext context) 从机制特定的XMLValidateContext实例中解组一个新的XMLSignature实例。abstract XMLSignatureunmarshalXMLSignature(XMLStructure xmlStructure) 从机制特定的XMLStructure实例中解组一个新的XMLSignature实例。
-
构造方法详细信息
-
XMLSignatureFactory
protected XMLSignatureFactory()默认构造方法,供子类调用。
-
-
方法详情
-
getInstance
返回支持指定 XML 处理机制和表示类型(例如:“DOM”)的XMLSignatureFactory。此方法使用标准 JCA 提供程序查找机制来定位和实例化所需机制类型的
XMLSignatureFactory实现。它遍历已注册安全性Provider的列表,从最喜欢的Provider开始。返回支持指定机制的第一个Provider的新XMLSignatureFactory对象。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 实现注意事项:
-
JDK 参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()返回的提供商顺序不同。 - 参数:
mechanismType- XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的XMLSignatureFactory部分。- 返回:
-
一个新的
XMLSignatureFactory - 抛出:
NullPointerException- 如果mechanismType是nullNoSuchMechanismException- 如果没有Provider支持指定机制的XMLSignatureFactory实现- 参见:
-
getInstance
返回一个XMLSignatureFactory支持请求的 XML 处理机制和表示类型(例如:“DOM”),由指定的提供者提供。请注意,指定的Provider对象不必在提供者列表中注册。- 参数:
mechanismType- XML 处理机制和表示的类型。有关标准机制类型的列表,请参阅 Java 安全标准算法名称规范 中的XMLSignatureFactory部分。provider-Provider对象- 返回:
-
一个新的
XMLSignatureFactory - 抛出:
NullPointerException- 如果provider或mechanismType是nullNoSuchMechanismException- 如果无法从指定的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- 如果provider或mechanismType是nullNoSuchMechanismException- 如果指定提供者无法提供指定机制的XMLSignatureFactory实现- 参见:
-
getInstance
返回一个支持默认 XML 处理机制和表示类型(“DOM”)的XMLSignatureFactory。此方法使用标准 JCA 提供程序查找机制来定位和实例化默认机制类型的
XMLSignatureFactory实现。它遍历已注册安全性Provider的列表,从最喜欢的Provider开始。返回第一个支持 DOM 机制的Provider的新XMLSignatureFactory对象。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 返回:
-
一个新的
XMLSignatureFactory - 抛出:
NoSuchMechanismException- 如果没有Provider支持 DOM 机制的XMLSignatureFactory实现- 参见:
-
getMechanismType
返回此XMLSignatureFactory支持的 XML 处理机制和表示的类型(例如:“DOM”)。- 返回:
-
此
XMLSignatureFactory支持的 XML 处理机制类型
-
getProvider
返回此XMLSignatureFactory的提供者。- 返回:
-
这个
XMLSignatureFactory的提供者
-
newXMLSignature
创建一个XMLSignature并使用指定的SignedInfo和KeyInfo对象的内容对其进行初始化。- 参数:
si- 签名信息ki- 关键信息(可能是null)- 返回:
XMLSignature- 抛出:
NullPointerException- 如果si是null
-
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- 如果si是nullClassCastException- 如果任何objects不是XMLObject类型
-
newReference
使用指定的 URI 和摘要方法创建一个Reference。- 参数:
uri- 参考 URI(可能是null)dm- 摘要方法- 返回:
Reference- 抛出:
IllegalArgumentException- 如果uri不符合 RFC 2396NullPointerException- 如果dm是null
-
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 2396NullPointerException- 如果dm是null
-
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 2396NullPointerException- 如果dm或digestValue是null
-
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元素设置为appliedTransforms和transforms的串联。- 参数:
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- 如果dm、appliedTransforms或result是null
-
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- 如果cm、sm或references是null
-
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
创建一个Manifest包含指定的Reference列表。- 参数:
references- 一个或多个Reference的列表。该列表被防御性复制以防止后续修改。- 返回:
Manifest- 抛出:
NullPointerException- 如果references是nullIllegalArgumentException- 如果references是空的ClassCastException- 如果references包含任何非Reference类型的条目
-
newManifest
创建一个Manifest包含指定的Reference列表和可选的 id。- 参数:
references- 一个或多个Reference的列表。该列表被防御性复制以防止后续修改。id- ID(可能是null)- 返回:
Manifest- 抛出:
NullPointerException- 如果references是nullIllegalArgumentException- 如果references是空的ClassCastException- 如果references包含任何非Reference类型的条目
-
newSignatureProperty
public abstract SignatureProperty newSignatureProperty(List <? extends XMLStructure > content, String target, String id) 创建一个SignatureProperty包含指定的XMLStructure列表、目标 URI 和可选 ID。- 参数:
content- 一个或多个XMLStructure的列表。该列表被防御性复制以防止后续修改。target- 此属性适用的签名的目标 URIid- ID(可能是null)- 返回:
SignatureProperty- 抛出:
NullPointerException- 如果content或target是nullIllegalArgumentException- 如果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- 如果properties是nullIllegalArgumentException- 如果properties是空的ClassCastException- 如果properties包含任何非SignatureProperty类型的条目
-
newDigestMethod
public abstract DigestMethod newDigestMethod(String algorithm, DigestMethodParameterSpec params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个DigestMethod。- 参数:
algorithm- 标识摘要算法的 URIparams- 算法特定的摘要参数(可能是null)- 返回:
DigestMethod- 抛出:
InvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
newSignatureMethod
public abstract SignatureMethod newSignatureMethod(String algorithm, SignatureMethodParameterSpec params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个SignatureMethod。- 参数:
algorithm- 标识签名算法的 URIparams- 特定于算法的签名参数(可能是null)- 返回:
SignatureMethod- 抛出:
InvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
newTransform
public abstract Transform newTransform(String algorithm, TransformParameterSpec params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个Transform。- 参数:
algorithm- 标识转换算法的 URIparams- 特定于算法的变换参数(可能是null)- 返回:
Transform- 抛出:
InvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
newTransform
public abstract Transform newTransform(String algorithm, XMLStructure params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个Transform。参数指定为机制特定的XMLStructure(例如:DOMStructure)。当参数为 XML 形式或没有用于指定参数的标准类时,此方法很有用。- 参数:
algorithm- 标识转换算法的 URIparams- 一个特定于机制的 XML 结构,从中解组参数(如果不需要或可选,可能是null)- 返回:
Transform- 抛出:
ClassCastException- 如果params的类型不适合这个XMLSignatureFactoryInvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
newCanonicalizationMethod
public abstract CanonicalizationMethod newCanonicalizationMethod(String algorithm, C14NMethodParameterSpec params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个CanonicalizationMethod。- 参数:
algorithm- 标识规范化算法的 URIparams- 算法特定的规范化参数(可能是null)- 返回:
CanonicalizationMethod- 抛出:
InvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
newCanonicalizationMethod
public abstract CanonicalizationMethod newCanonicalizationMethod(String algorithm, XMLStructure params) throws NoSuchAlgorithmException , InvalidAlgorithmParameterException 为指定的算法 URI 和参数创建一个CanonicalizationMethod。参数指定为机制特定的XMLStructure(例如:DOMStructure)。当参数为 XML 形式或没有用于指定参数的标准类时,此方法很有用。- 参数:
algorithm- 标识规范化算法的 URIparams- 一个特定于机制的 XML 结构,从中解组参数(如果不需要或可选,可能是null)- 返回:
CanonicalizationMethod- 抛出:
ClassCastException- 如果params的类型不适合这个XMLSignatureFactoryInvalidAlgorithmParameterException- 如果指定的参数不适合请求的算法NoSuchAlgorithmException- 如果找不到指定算法的实现NullPointerException- 如果algorithm是null
-
getKeyInfoFactory
返回创建KeyInfo对象的KeyInfoFactory。返回的KeyInfoFactory具有与此XMLSignatureFactory相同的机制类型和提供者。- 返回:
KeyInfoFactory- 抛出:
NoSuchMechanismException- 如果具有相同机制类型和提供者的KeyFactory实现不可用
-
unmarshalXMLSignature
public abstract XMLSignature unmarshalXMLSignature(XMLValidateContext context) throws MarshalException 从机制特定的XMLValidateContext实例中解组一个新的XMLSignature实例。- 参数:
context- 一个特定于机制的上下文,从中解组签名- 返回:
XMLSignature- 抛出:
NullPointerException- 如果context是nullClassCastException- 如果context的类型不适合该工厂MarshalException- 如果在解组期间发生不可恢复的异常
-
unmarshalXMLSignature
public abstract XMLSignature unmarshalXMLSignature(XMLStructure xmlStructure) throws MarshalException 从机制特定的XMLStructure实例中解组一个新的XMLSignature实例。如果您只想解组(而不是验证)XMLSignature,则此方法很有用。- 参数:
xmlStructure- 一种特定于机制的 XML 结构,从中解组签名- 返回:
XMLSignature- 抛出:
NullPointerException- 如果xmlStructure是nullClassCastException- 如果xmlStructure的类型不适合该工厂MarshalException- 如果在解组期间发生不可恢复的异常
-
isFeatureSupported
指示是否支持指定的功能。- 参数:
feature- 功能名称(作为绝对 URI)- 返回:
true如果支持指定的功能,false否则- 抛出:
NullPointerException- 如果feature是null
-
getURIDereferencer
返回对URIDereferencer的引用,默认情况下用于取消引用Reference对象中的 URI。- 返回:
-
对默认
URIDereferencer的引用(从不null)
-