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。如果使用来自不同提供者或不同机制类型的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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic XMLSignatureFactory返回支持默认XML处理机制和表示类型("DOM")的XMLSignatureFactory。static XMLSignatureFactorygetInstance(String mechanismType) 返回支持指定的XML处理机制和表示类型(例如:"DOM")的XMLSignatureFactory。static XMLSignatureFactorygetInstance(String mechanismType, String provider) 返回由指定提供者提供的支持请求的XML处理机制和表示类型(例如:"DOM")的XMLSignatureFactory。static XMLSignatureFactorygetInstance(String mechanismType, Provider provider) 返回由指定提供者提供的支持请求的XML处理机制和表示类型(例如:"DOM")的XMLSignatureFactory。final KeyInfoFactory返回创建KeyInfo对象的KeyInfoFactory。final String返回此XMLSignatureFactory支持的XML处理机制和表示类型(例如:"DOM")的类型。final Provider返回此XMLSignatureFactory的提供者。abstract URIDereferencer返回用于默认解除Reference对象中URI的URIDereferencer的引用。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) 包含指定的Reference列表的Manifest。abstract ManifestnewManifest(List<? extends Reference> references, String id) 包含指定的Reference列表和可选ID的Manifest。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) 包含指定的SignatureProperty列表和可选ID的SignatureProperties。abstract SignaturePropertynewSignatureProperty(List<? extends XMLStructure> content, String target, String id) 包含指定的XMLStructure列表、目标URI和可选ID的SignatureProperty。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实例。
-
Constructor Details
-
XMLSignatureFactory
protected XMLSignatureFactory()默认构造函数,供子类调用。
-
-
Method Details
-
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为null -
NoSuchMechanismException- 如果没有Provider支持指定机制的XMLSignatureFactory实现 - 参见:
-
getInstance
返回一个支持请求的XML处理机制和表示类型(例如:"DOM")的XMLSignatureFactory,由指定的提供程序提供。请注意,指定的Provider对象不必在提供程序列表中注册。- 参数:
-
mechanismType- XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的XMLSignatureFactory部分,了解标准机制类型的列表。 -
provider-Provider对象 - 返回:
-
一个新的
XMLSignatureFactory - 抛出:
-
NullPointerException- 如果provider或mechanismType为null -
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- 如果provider或mechanismType为null -
NoSuchMechanismException- 如果指定提供程序中不存在指定机制的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为null -
ClassCastException- 如果任何objects不是XMLObject类型
-
newReference
创建一个具有指定URI和摘要方法的Reference。- 参数:
-
uri- 引用URI(可以为null) -
dm- 摘要方法 - 返回:
-
一个
Reference - 抛出:
-
IllegalArgumentException- 如果uri不符合RFC 2396标准 -
NullPointerException- 如果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 2396标准 -
NullPointerException- 如果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 2396 标准 -
NullPointerException- 如果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。当一个包含此引用的
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
创建一个包含指定Reference列表的Manifest。- 参数:
-
references- 一个或多个Reference列表。该列表进行了防御性复制,以防止后续修改。 - 返回:
-
一个
Manifest - 抛出:
-
NullPointerException- 如果references为null -
IllegalArgumentException- 如果references为空 -
ClassCastException- 如果references包含任何不是Reference类型的条目
-
newManifest
创建一个包含指定Reference列表和可选ID的Manifest。- 参数:
-
references- 一个或多个Reference列表。该列表进行了防御性复制,以防止后续修改。 -
id- ID(可以为null) - 返回:
-
一个
Manifest - 抛出:
-
NullPointerException- 如果references为null -
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- 如果content或target为null -
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- 如果properties为null -
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- 如果algorithm为null
-
newSignatureMethod
public abstract SignatureMethod newSignatureMethod(String algorithm, SignatureMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException 为指定的算法URI和参数创建一个SignatureMethod。- 参数:
-
algorithm- 标识签名算法的URI -
params- 算法特定的签名参数(可以为null) - 返回:
-
SignatureMethod - 抛出:
-
InvalidAlgorithmParameterException- 如果指定的参数不适用于请求的算法 -
NoSuchAlgorithmException- 如果找不到指定算法的实现 -
NullPointerException- 如果algorithm为null
-
newTransform
public abstract Transform newTransform(String algorithm, TransformParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException 为指定的算法URI和参数创建一个Transform。- 参数:
-
algorithm- 标识变换算法的URI -
params- 算法特定的变换参数(可以为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- 标识变换算法的URI -
params- 从中解组参数的机制特定的XML结构(如果不需要或可选,可以为null) - 返回:
-
Transform - 抛出:
-
ClassCastException- 如果params的类型不适用于此XMLSignatureFactory -
InvalidAlgorithmParameterException- 如果指定的参数不适用于请求的算法 -
NoSuchAlgorithmException- 如果找不到指定算法的实现 -
NullPointerException- 如果algorithm为null
-
newCanonicalizationMethod
public abstract CanonicalizationMethod newCanonicalizationMethod(String algorithm, C14NMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException 为指定的算法URI和参数创建一个CanonicalizationMethod。- 参数:
-
algorithm- 标识规范化算法的URI -
params- 算法特定的规范化参数(可以为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- 标识规范化算法的URI -
params- 从中解组参数的机制特定的XML结构(如果不需要或可选,可以为null) - 返回:
-
CanonicalizationMethod - 抛出:
-
ClassCastException- 如果params的类型不适用于此XMLSignatureFactory -
InvalidAlgorithmParameterException- 如果指定的参数不适用于请求的算法 -
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为null -
ClassCastException- 如果context的类型不适用于此工厂 -
MarshalException- 如果在解组过程中发生不可恢复的异常
-
unmarshalXMLSignature
public abstract XMLSignature unmarshalXMLSignature(XMLStructure xmlStructure) throws MarshalException 从机制特定的XMLStructure实例中解组一个新的XMLSignature实例。如果只想解组(而不验证)XMLSignature,则此方法很有用。- 参数:
-
xmlStructure- 从中解组签名的机制特定的XML结构 - 返回:
-
XMLSignature - 抛出:
-
NullPointerException- 如果xmlStructure为null -
ClassCastException- 如果xmlStructure的类型不适用于此工厂 -
MarshalException- 如果在解组过程中发生不可恢复的异常
-
isFeatureSupported
指示是否支持指定的功能。- 参数:
-
feature- 功能名称(作为绝对URI) - 返回:
-
如果支持指定的功能,则返回
true,否则返回false - 抛出:
-
NullPointerException- 如果feature为null
-
getURIDereferencer
返回一个引用,该引用用于默认解除Reference对象中的URI。- 返回:
-
默认
URIDereferencer的引用(永不为null)
-