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