2014-10-27 103 views
0

我正在使用傑克遜序列化對象以保存在MongoDB上(通過Jongo)。這些對象包含我想要存儲在數據庫上的密碼哈希。安全 - 傑克遜密碼序列化

我也有一個REST API將返回這些對象。當對象通過REST API序列化時,它們將包含密碼哈希。儘管通信是通過HTTPS完成的,但這對我來說聽起來像是一種安全風險。我如何通過REST API阻止密碼散列的序列化,但是不能防止數據庫持久化?有沒有像字段的條件序列化?

回答

2

@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); 

其中包括用戶的所有屬性。

更多的信息在這裏:http://wiki.fasterxml.com/JacksonJsonViews

+0

這確實是一種可能性。我不知道該視圖功能。但是,由於我使用的是Play框架,我不確定是否可以使用這種註釋'@ JsonView' – hvieira 2014-10-30 22:31:44