java - 如何签署 Spring Rest Controller 使用的 JSON 消息?

标签 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 Controller 概念。

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

有什么方法可以计算整个 JSON 消息正文在消息发送和到达时的签名,以及将签名放在哪里以便它可以与消息一起传递?其中一个想法是使用自定义 HTTP header 作为签名。无论如何,首先如何计算它?

最佳答案

您可以在 Spring MVC 中使用 servlet 过滤器,并在请求和响应中随意修改您的内容

示例:

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/

关于java - 如何签署 Spring Rest Controller 使用的 JSON 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849655/

相关文章:

java - MongoDB 响应式(Reactive)无法发送完整信号

java - 关于 javax.persistence JAR 的 Maven 依赖项?

python - 如何使用 Python 从 CSV 文件生成嵌套 JSON 数据

javascript - 在 cookie 中存储和检索 json 对象

java - 为 Intellij 中的未使用枚举字段启用警告

java - 地址已在使用异常(多播套接字)

java - Jackson继承——使用@JsonProperty解析子类中的嵌套JSON

java - 应用启动Spring Boot失败

java - Spring 配置文件 : Simple example of ActiveProfilesResolver?

java - 在异步任务中使用外部类变量