如何签署 JSON 由 Spring Rest 控制器使用的消息?
How to sign JSON message used by Spring Rest controller?
我有一个 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 消息 body 在消息发送和到达时的签名,以及将签名放在哪里以便与消息一起传递?其中一个想法是使用自定义 HTTP header 作为签名。无论如何,首先如何计算它?
您可以将 servlet 过滤器与 Spring MVC 一起使用,并在请求和响应中随意修改您的内容
示例:
http://www.mkyong.com/spring-mvc/how-to-register-a-servlet-filter-in-spring-mvc/
或者你可以使用 Spring 3 MVC 拦截器
http://viralpatel.net/blogs/spring-mvc-interceptor-example/
我有一个 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 消息 body 在消息发送和到达时的签名,以及将签名放在哪里以便与消息一起传递?其中一个想法是使用自定义 HTTP header 作为签名。无论如何,首先如何计算它?
您可以将 servlet 过滤器与 Spring MVC 一起使用,并在请求和响应中随意修改您的内容
示例:
http://www.mkyong.com/spring-mvc/how-to-register-a-servlet-filter-in-spring-mvc/
或者你可以使用 Spring 3 MVC 拦截器 http://viralpatel.net/blogs/spring-mvc-interceptor-example/