2016-10-29 5 views
1

dropwizard + morphia + jackson (dropwizard의 기본값) 조합을 사용하려고하는데, @JsonIgnore 또는 @JsonIgnoreProperties을 사용할 수 없습니다. 나는 @JsonIgnoreProperties 클래스 정의를 통해 내 API의 소비자에게 (암호와 소금) 노출되고 싶지 않아요. 나는 또한 getter의 모든 순열에 대한 필드 선언 자체를 통해 @JsonIgnore을 시도했습니다. 종류의 손실 지금.비밀 필드를 숨기려면 Jackson과 JsonIgnore

편집 : 여기 모델의 :

@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...를 사용하여 클래스를 정의뿐만 아니라 단지 게터, 세터 이상 @JsonIgnore을 가진 시도했습니다

나는 morphia v1.2.1을 사용하고 있습니다. 지금 당장 나는 morphia의 BasicDAO를 확장하는 기본적인 DAO를 가지고 있으며, 그 순간 대부분 프록시 만합니다. 도움이된다면 해당 코드 조각을 게시 할 수 있습니다.

+0

코드를 게시 할 수 있습니까? – Tibrogargan

답변

2

비밀번호와 소금은 모두 @JsonProperty으로 표시되며 setter 및 getter의 무시 값보다 우선합니다. JsonPropety 주석을 제거하거나 JsonIgnore로 바꾸면 무시할 필드는 실제로 무시됩니다.

+0

네, 맞습니다. 나는'@JsonProperty'에 대해 더 읽을 필요가 있다고 생각한다. 비밀번호 업데이트를 위해 PUT을 허용하는 추가 질문 (필요한 경우 새 질문에 게시 할 수 있음)이 있습니다. 즉. 암호를 변경하라는 요청을 받으면 요청에서 원시 암호를 가져 와서 해시하고 소금을 처리 한 다음이를 유지해야합니다. 이 현재의 설정으로 일어날까요? – Justin

+3

JsonProperty로 setter에 레이블을 붙이고 JsonIgnore로 Getter를 레이블링하여 개체를 비대칭으로 만들 수 있어야하지만 필드에는 여전히 JsonIgnore라는 레이블이 있어야합니다 (http://www.davismol.net/2015/03/21/ 참조). jackson-using-jsonignore-and-jsonproperty-annotations-to-exclude-from-json-deserialization /) –

+0

여러분의 도움을 주셔서 감사합니다! – Justin