DTO转换实体可提高安全性

时间:2018-05-04 08:14:25

标签: java spring dto

关于将实体转换为DTO,我有一个问题。我已经读过,在休息应用程序中将实体转换为DTO是好的,这样它就可以隐藏你的实体数据。 例如 如果我有一个实体用户,并且有两个休息端点--GET和PUT。 GET获取数据,PUT更新数据。现在,如果我不将实体转换为DTO,我将暴露我的实体实例,有人可以使用PUT方法实例并更新用户数据。

但是我的问题是,如果我在使用GET和PUT方法(大多数开发人员这样做)时使用相同的DTO类来转换数据,也会发生这种情况。那么如何将实体转换为DTO可以提高安全性。

User.java

@Entity
@Table
public class User{
private int id;
private int name;
private String password;
}

请给你宝贵的意见,以澄清我的怀疑。谢谢!

2 个答案:

答案 0 :(得分:0)

您明确定义了应用程序外围设备可用的属性。我不确定这会增加安全性,但它可以保护您免受不必要的行为。如果您通过Jackson自动将REST主体转换为JSON,则会暴露您实体的每个获取者。因此,如果您添加getXXX方法来评估域中的某些内容,您可能会不情愿地将其暴露给外部世界。

例如,您可能不希望公开哪些授权可用于您的用户或用户的密码。

我喜欢使用Adapter Pattern进行REST / JMS交互。

答案 1 :(得分:0)

关注点分离。

GET:在您的示例中,您不会将ID返回给客户端吗?

PUT:你不会填充id。