我正在使用 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);
这将包括用户的所有属性。
关于java - 安全 - Jackson 密码序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590123/