最近我们的任务是为我们的产品提出XML通信规范。我的一些同事对JAXB的编组和解组XML文档有很高的评价。我花了一些时间玩它,我明白它们来自哪里。它使简单的XML文档变得简单。
现在把它提升一个档次。我希望在我们的通信模型中看到的一件事是“内置”签名验证,以便在我之后使用它。我遇到的一个问题是验证签名我需要将相应的XML视为字节。让我们来看看这个例子......
<topLevel>
<sensitiveData encoding="UTF8">
<creditCard>
<number>1234-1234-1234-1234</number>
<expDate>Oct 2020</expDate>
</creditCard>
</sensitiveData>
<signatureOfSensitiveData algorithm="SHA1WithRSA">VGhpc0lzQVNpZ25hdHVyZQ==</signatureOfSensitiveData>
</topLevel>
编辑:我实际上并没有传递信用卡数据。这里只是一个例子。
如果我可以获得“sensitiveData”标记内的所有内容的byte[]
(由编码确定)表示,那将是多么美妙。我甚至不介意在byte[]
上再次打电话给“unmarshall”。
这也为我们打开了另一扇门。我们实际上可以将“压缩”和“加密”属性引入元素中。如果我们可以将它们视为byte[]
,那么我们就可以对它们进行充气和解密,然后将它们传递给它再次进行解组。
旁注:我认为如果您对XML进行base64编码然后将其包含在元素中,则此方法有效。但这会迫使我们基于64甚至简单的文档,并在我们的消息中引入一些不必要的膨胀。
有任何解决方案吗?我希望我在JAXB中缺少一些基本的东西,在我得到它之后会变得轻而易举。
谢谢!
答案 0 :(得分:0)
您可以使用支持WS-Security的JAX-WS框架。 JAX-WS依赖JAXB,但在通信部分添加了对SOAP协议的支持,并且WS-Security是SOAP / XML中XML签名,加密和其他安全性功能的标准。 WS-Security依赖于注释中提到的XML签名和加密标准。
此类框架的示例(非详尽列表):Apache CXF,Glassfish Metro等More info。