最近,我们的任务是为我们的产品制定一个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编码,然后将其包含在一个元素中,这是可行的。但这迫使我们base64甚至简单的文档,并在我们的消息中引入一些不必要的膨胀。
对此有什么解决方案吗?我希望我只是在JAXB中遗漏了一些基本的东西,在我获得这些东西之后,这将是轻而易举的事情。
谢谢!
发布于 2019-02-17 18:56:12
您可以使用支持WS-Security的JAX-WS框架。JAX-WS依赖于JAXB,但添加了支持SOAP协议的通信部分,并且WS-Security是SOAP/XML中XML签名、加密和其他安全特性的标准。WS-Security依赖于评论中提到的XML签名和加密标准。
这类框架的例子(非详尽列表):Apache CXF、Glassfish Metro等More info。
https://stackoverflow.com/questions/11301522
复制