You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:33:17