【问题标题】:Entity to DTO conversion increases security实体到 DTO 的转换提高了安全性
【发布时间】:2018-05-04 08:14:25
【问题描述】:

我有一个关于将实体转换为 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;
}

请给你宝贵的cmets来澄清我的这个疑问。谢谢!

【问题讨论】:

  • someone could use the instance with PUT method and update the User Data - 这就是游戏授权的地方。只有 AUTHORIZED 用户才能执行相应的操作。
  • @J-Alex : 很好.. 我在问 DTO 在这方面有什么帮助?

标签: java spring dto


【解决方案1】:

您明确定义哪些属性可用于您的应用程序的外围设备。我不确定这会增加安全性,但它可以保护您免受不良行为的影响。如果您通过 Jackson 自动将 REST 主体转换为 JSON,那么您的实体的每个 getter 都会被公开。因此,如果您添加一个 getXXX 方法来评估您域中的某些内容,您可能会不情愿地将其暴露给外界。

例如,您可能不想公开哪些授权可供您的用户使用,或者用户的密码。

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

【讨论】:

    【解决方案2】:

    关注点分离。

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

    PUT:您不会填充 id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2021-06-16
      • 2010-11-15
      • 1970-01-01
      相关资源
      最近更新 更多