0
我正在使用杰克逊序列化对象以保存在MongoDB上(通过Jongo)。这些对象包含我想要存储在数据库上的密码哈希。安全 - 杰克逊密码序列化
我也有一个REST API将返回这些对象。当对象通过REST API序列化时,它们将包含密码哈希。尽管通信是通过HTTPS完成的,但这对我来说听起来像是一种安全风险。我如何通过REST API阻止密码散列的序列化,但是不能防止数据库持久化?有没有像字段的条件序列化?
我正在使用杰克逊序列化对象以保存在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只在响应用户的 “名” 属性。
注意:如果没有view标注,则认为是由Object.class标识的View:即包含在所有视图中。
当序列化到数据库,你可以这样做:
objectMapper.viewWriter(Views.Internal.class).writeValue(out, beanInstance);
其中包括用户的所有属性。
这确实是一种可能性。我不知道该视图功能。但是,由于我使用的是Play框架,我不确定是否可以使用这种注释'@ JsonView' – hvieira 2014-10-30 22:31:44