【问题标题】:Generate HMAC before sending JSON response with Jackson + Jersey在使用 Jackson + Jersey 发送 JSON 响应之前生成 HMAC
【发布时间】:2015-11-07 20:59:27
【问题描述】:

我正在使用 Jersey 和 Jackson 构建一个 REST API。我使用本教程 (http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/) 开始使用 Jackson。

我想在发送之前签署回复。如何获取将生成的 JSON 字符串以便我对其进行签名?

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public Response getTrackInJSON() {

    Track track = new Track();
    track.setTitle("Enter Sandman");
    track.setSinger("Metallica");

    String HMAC = HMAC("[secret]", [track.toJson]);

    return Response.status(201).entity(track).header("HMAC", HMAC).build();

}

我还想验证传入请求的签名:

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public Response createTrackInJSON(Track track) {

    String rawRequestBody = [how to get the raw request?];

    //get header
    //verify HMAC

    return Response.status(201).entity(result).build();

}

所以我最大的问题是如何在对象被发送之前获取将生成的原始 JSON 字符串?

感谢您的回答

【问题讨论】:

    标签: java json jersey jackson jax-rs


    【解决方案1】:

    两者都可以通过绕过 Jersey 的默认输入/输出数据绑定并直接使用 Jackson 来完成。为此,您可以声明输入为byte[]InputStream,并使用Jackson 的ObjectMapper.readValue(...)。对于输出,您将声明返回byte[](可能在Response 内),并使用ObjectMapper.writeValueAsBytes(responsePojo)。或者,如果使用字符串更容易(我忘记了 HMAC 计算如何工作的细节),ObjectMapper.writeValueAsString(responsePojo) 会将序列化为String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多