2016-01-18 21 views
1

我有一个接受JSON消息的弹簧安置应用程序,这样写如何签署Spring Rest控制器使用的JSON消息?

@RequestMapping(value = "/myhook", method = RequestMethod.POST, 
    produces = JSON, consumes = JSON) 
    public @ResponseBody MyResponse doIt 
    (@Valid @RequestBody(required = true) MyContractRequest request) { 
     MyResponse response; 
     ... 
     return response; 
    } 

这个作品真的很好,几乎没有代码来支持,但现在我必须签署既响应和请求的要求。

我从简单地计算Java级别的所有消息字段的共享签名开始,并将其分配给专用签名字段。然而,这需要有和计算签名维护代码:

public void update(java.security.Signature sign) throws Exception { 
    sign.update(name); 
    sign.update(value); 
    sign.update(etc); 
    } 

一些身边的人表示认为,编写和维护这个签名代码的需要可能不是最好的设计,它可能是更好的签整个消息作为单个JSON字符串。我可以手动获取请求作为字符串,然后手动处理JSON,但我真的想保留Spring控制器的概念。

此外,我不能再在消息本身中拥有签名字段,因为此字段的值显然也会更改JSON字符串的签名。

有没有什么方法可以计算邮件出发和到达时整个JSON邮件正文的签名,以及将签名放在何处以便可以与邮件一起传递?其中一个想法是使用自定义HTTP标头进行签名。无论如何,如何计算它呢?

+0

您是否成功提供了建议的答案? – Xvolks

+0

是的,工作正常:) – h22

回答