【问题标题】:Add xml signature at the end of xml在xml末尾添加xml签名
【发布时间】:2015-11-18 23:17:06
【问题描述】:

我使用 JAXB 生成 XML 并将许可证签名添加到生成的 xml 中,格式如下: xmlFile.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Users>
      <User>.....</User>
      <Signature></Signature><!-- This is generated using RSA and SHA -->
</Users>

Java 类:

public class Users {
    private List<User> userList;
    private String signature;
    //Setters & Getters goes here
}

现在将使用 jaxb 对其进行解析,但提取签名内容(包括标签),使用 XSL 设置为用户对象,并将在我的设计中单独保存到数据库中。后来为了验证这个许可证,我再次形成了一个 XML,但由于我使用现有信息并创建了一个 XML,它创建的 XML 如下所述:

resultXMl.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Users>
      <User>.....</User>
      <signature><Signature></Signature><!-- This is generated using RSA and SHA --></signature>
</Users>

根据 JAXB 实现,它是正确的,但签名现在有两个标签。任何人都可以建议我如何实现这一目标。或者还有其他方法可以封装 xml 吗?

【问题讨论】:

  • 此解决方案对我不起作用,因为您正在根据 JAXB 生成的 xml 创建签名。我已经这样做了。但我的需要是我已将这些信息分别保存到 DB 中,现在一段时间后我想验证该许可证,所以我正在根据 DB 详细信息重新构建 xml,当我发送它进行验证时必须有效。我希望你能解决我的问题。
  • 请不要使用 “非常感谢您立即回复。” 之类的短语。无论意图多么友好和即将到来,这不是其他人根据命令执行您的工作的站点,并且此类请求通常不受欢迎。还有其他(付费)网站,您可以要求快速响应。另见faqHow to Ask

标签: java xml xslt jaxb


【解决方案1】:

稍后为了验证这个许可证,我再次形成了一个 XML,但由于我使用现有信息并创建了一个 XML,它创建的 XML 如下所述:

无论您使用什么来重新创建 XML,您的代码中显然存在一个错误,它引入了第二个 &lt;signature&gt; 元素。在你的代码中搜索你添加这个额外元素的位置(区分大小写,显然你的额外元素是signature,原来是Signature)。

如果你找不到它,你也可以通过使用如下的转换来修复它(你标记了这个问题 XSLT,所以我假设你想要一个 XSLT 解决方案来摆脱额外的元素):

<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
</xsl:template>

<!-- remove this element (if it is in a namespace, adjust accordingly) -->
<xsl:template match="signature">
    <xsl:apply-templates select="node() | @*" />
</xsl:template>

根据 JAXB 实现,它是正确的,但签名现在有两个标签。任何人都可以建议我如何实现这一目标。

我怀疑它是否正确,但这取决于“根据 JAXB”的含义。如果你的绑定允许这个额外的元素,或者允许任何内容,那么是的,它是正确的。

来自XML-DSIG perspective,它不正确,但一开始就不正确,因为原始代码没有显示 XML-DSIG 所需的命名空间。但我在这里部分猜测,上面句子中“正确”的意思几乎没有什么可继续说明,更是如此,因为你的例子无效。

您还应该考虑查看代码是如何存储在数据库中的,可能元素 signature 是通过代码添加到那里的,并且实际签名作为子元素附加(它本身以 Signature 打开)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多