Jackson 和 JsonIgnore 隐藏秘密字段
Jackson and JsonIgnore to hide secret fields
我正在尝试结合使用 dropwizard + morphia + jackson(dropwizard 的默认设置),但我无法使 @JsonIgnore
或 @JsonIgnoreProperties
工作。对于我不想向 API 的消费者公开的属性(密码和盐),我已经尝试 @JsonIgnoreProperties
class 定义,我也尝试过 [=11] =] 在字段声明本身以及 getter 和 setter 的每个排列上......现在有点不知所措。
编辑:这是模型:
@Entity(value = "user", noClassnameStored = true)
@Indexes({
@Index(fields = {
@Field(value = "email", type = IndexType.ASC)},
options = @IndexOptions(unique = true, sparse = true)
)
})
public class User {
@Id
private ObjectId id = new ObjectId();
@JsonProperty
private String email;
@JsonProperty
private byte[] password;
@JsonProperty
private byte[] salt = SecurityUtils.getSalt();
@Reference
private Person person = new Person();
public String getId() {
return id.toHexString();
}
public void setId(ObjectId id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@JsonIgnore
public byte[] getPassword() {
return password;
}
@JsonIgnore
public void setPassword(String password) {
this.password = SecurityUtils.hashPassword(password.toCharArray(), this.getSalt());
}
@JsonIgnore
public byte[] getSalt() {
return salt;
}
@JsonIgnore
public void setSalt(byte[] salt) {
this.salt = salt;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
除了上述之外,我还尝试使用 @JsonIgnoreProperties({"password", "salt"} public class User...
定义 class,以及仅在 getter 上设置 @JsonIgnore
,setters等
我正在使用吗啡 v1.2.1 来坚持。现在我有一个基本的 DAO,它扩展了吗啡的 BasicDAO,目前主要只是代理。如果有帮助,可以 post 代码片段吗?
密码和盐都被标记为 @JsonProperty
,这优先于 setter 和 getter 上的忽略。我认为如果您删除 JsonPropety 注释(或将其替换为 JsonIgnore),那些您想要忽略的字段实际上将被忽略。
我正在尝试结合使用 dropwizard + morphia + jackson(dropwizard 的默认设置),但我无法使 @JsonIgnore
或 @JsonIgnoreProperties
工作。对于我不想向 API 的消费者公开的属性(密码和盐),我已经尝试 @JsonIgnoreProperties
class 定义,我也尝试过 [=11] =] 在字段声明本身以及 getter 和 setter 的每个排列上......现在有点不知所措。
编辑:这是模型:
@Entity(value = "user", noClassnameStored = true)
@Indexes({
@Index(fields = {
@Field(value = "email", type = IndexType.ASC)},
options = @IndexOptions(unique = true, sparse = true)
)
})
public class User {
@Id
private ObjectId id = new ObjectId();
@JsonProperty
private String email;
@JsonProperty
private byte[] password;
@JsonProperty
private byte[] salt = SecurityUtils.getSalt();
@Reference
private Person person = new Person();
public String getId() {
return id.toHexString();
}
public void setId(ObjectId id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@JsonIgnore
public byte[] getPassword() {
return password;
}
@JsonIgnore
public void setPassword(String password) {
this.password = SecurityUtils.hashPassword(password.toCharArray(), this.getSalt());
}
@JsonIgnore
public byte[] getSalt() {
return salt;
}
@JsonIgnore
public void setSalt(byte[] salt) {
this.salt = salt;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
除了上述之外,我还尝试使用 @JsonIgnoreProperties({"password", "salt"} public class User...
定义 class,以及仅在 getter 上设置 @JsonIgnore
,setters等
我正在使用吗啡 v1.2.1 来坚持。现在我有一个基本的 DAO,它扩展了吗啡的 BasicDAO,目前主要只是代理。如果有帮助,可以 post 代码片段吗?
密码和盐都被标记为 @JsonProperty
,这优先于 setter 和 getter 上的忽略。我认为如果您删除 JsonPropety 注释(或将其替换为 JsonIgnore),那些您想要忽略的字段实际上将被忽略。