java - 安全 - Jackson 密码序列化

标签 java json rest serialization jackson

我正在使用 Jackson 序列化要保存在 MongoDB 上的对象(通过 Jongo)。这些对象包含我想存储在数据库中的密码散列。

我还有一个 REST API 可以返回这些对象。当对象通过 REST API 序列化时,它们将包含密码哈希。尽管通信是通过 HTTPS 完成的,但这对我来说听起来像是一个安全风险。如何防止通过 REST API 序列化密码哈希而不是为了数据库持久性?是否有字段的条件序列化之类的东西?

最佳答案

@JsonView 可能适合您的需要。

  // View definitions:
  class Views {
            static class Public { }
            static class Internal extends Public { }
  }

  public class User {
            // Name is public
            @JsonView(Views.Public.class) String name;
            // Hash password only for internal usage
            @JsonView(Views.Internal.class) String hashPassword;
  }

在您的 REST API 中,您可以指定:

public class Resource {

  @JsonView(Views.Public.class)
  @GET
  @Produces(MediaType.APPLICATION_JSON )
  public List< User > getElements() {
    //do something
    return someResultList;
  }
}

上述 api 只会在响应中包含用户的“name”属性。

注意:如果没有 View 注解,则假定为由 Object.class 标识的 View :即包含在所有 View 中。

当序列化到数据库时,你可以这样做:

objectMapper.viewWriter(Views.Internal.class).writeValue(out, beanInstance);

这将包括用户的所有属性。

更多信息在这里:http://wiki.fasterxml.com/JacksonJsonViews

关于java - 安全 - Jackson 密码序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590123/

相关文章:

java - 在 recyclerView android 上只能点击一个项目

rest - 套接字可以代替 HTTP 请求吗? (套接字与 http)

java - Android - Java - 获取 JSONObject 中的第 n 个元素

具有非 JS REST API 的 Javascript 服务器渲染库

java - Rest 服务应该有 View 模型吗?

java - Bean 映射的 Hibernate 持久性问题(Dozer)

java - 如何改变JTable中单元格的颜色以提供动画效果?

java - getResource返回NullPointerException

java - 带有 json/xml 响应的嵌入式 jetty

json - REST 与 Spring 和 Jackson 完整数据绑定(bind)