如何签署Spring Rest控制器使用的JSON消息?

时间:2016-01-18 07:54:03

标签: java json spring rest signing

我有一个接受JSON消息的Spring REST应用程序,类似于

 @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标头进行签名。无论如何,如何先计算它?

1 个答案:

答案 0 :(得分:1)

你可以使用带有Spring MVC的servlet过滤器,并在请求和响应中修改你想要的内容

示例:

http://www.mkyong.com/spring-mvc/how-to-register-a-servlet-filter-in-spring-mvc/

或者您可以使用Spring 3 MVC Interceptor http://viralpatel.net/blogs/spring-mvc-interceptor-example/