如何使用Xades4j从合格属性中移除SigningCertificate节点
如何用Xades4j移除合格属性中的xades:SigningCertificate节点
Xades4j默认会在签名的**合格属性(Qualifying Properties)**中自动添加<xades:SigningCertificate>节点,要移除它,需要通过自定义属性提供者过滤该属性,具体步骤如下:
1. 实现自定义QualifyingPropertiesProvider
创建自定义属性提供者类,过滤默认生成的SigningCertificateProperty:
import xades4j.providers.QualifyingPropertiesProvider; import xades4j.properties.QualifyingProperty; import xades4j.properties.SigningCertificateProperty; import java.util.Collection; import java.util.stream.Collectors; public class CustomQualifyingPropsProvider implements QualifyingPropertiesProvider { private final QualifyingPropertiesProvider defaultProvider; public CustomQualifyingPropsProvider(QualifyingPropertiesProvider defaultProvider) { this.defaultProvider = defaultProvider; } @Override public Collection<QualifyingProperty> getQualifyingProperties() { // 过滤掉SigningCertificate属性 return defaultProvider.getQualifyingProperties().stream() .filter(prop -> !(prop instanceof SigningCertificateProperty)) .collect(Collectors.toList()); } }
2. 替换签名器的默认属性提供者
在构建XadesSigner时,将默认属性提供者替换为自定义实现:
// 假设已初始化KeyingDataProvider等基础组件 XadesSignerBuilder signerBuilder = new XadesBesSignerBuilder(keyingDataProvider); // 包装默认属性提供者为自定义实现 QualifyingPropertiesProvider defaultPropsProvider = signerBuilder.getQualifyingPropertiesProvider(); signerBuilder.setQualifyingPropertiesProvider(new CustomQualifyingPropsProvider(defaultPropsProvider)); // 构建签名器并执行签名操作 XadesSigner signer = signerBuilder.build(); signer.sign(targetDocument, signedDataObjects);
完成配置后,生成的XAdES签名中将不再包含<xades:SigningCertificate>节点。注意:部分XAdES标准profile要求必须包含该属性,仅在自定义需求或场景允许移除时使用此方法。
内容的提问来源于stack exchange,提问作者Hanad Ahmed
相关产品推荐
相关产品推荐

