【问题标题】:REST API request body holds database primary keyREST API 请求正文包含数据库主键
【发布时间】:2018-10-15 19:37:20
【问题描述】:

由于我是新手,我的问题可能非常简单。我用谷歌搜索,但没有找到令人信服的答案。致力于开发 REST API,API 的目的是从现有学生中创建一个玩家团队。 POST 方法,到目前为止,请求正文将在请求正文中保存学生 ID(主键)。

在访问 REST API 时,请求正文是否可以包含 Tables 主键?

【问题讨论】:

  • 可以的。但也许最好不要通过 REST API 泄​​露内部 ID。请改用稳定的标识符。
  • @LutzHorn 稳定标识符对学生来说就像唯一标识符(varchar)吗?
  • 这样的。用户名、UUID、...任何不会更改且不是数据库表内部自动生成的 ID。
  • 知道了,谢谢。

标签: java rest


【解决方案1】:

您可以使用加密器对Id或主密钥进行加密,然后在服务器端接收时对其进行解密。这也将保存漏洞问题,因为您将在服务器端验证 Id,因此在传递 Id 的 POST 请求时无法保存恶意问题。

我将再次重新发布整个答案,但只是为了添加一个概述

@JsonIgnore
private Long PrimaryKey;
private String Id;
//Other variables
public Long getDecryptedPrimaryKey(){
  //Decryption Logic for Id value
}

Public String getId(){
 //Encryption Logic
}

在这里,当 JSON Serialiser 获取 Id 时,它将调用 Id 的 getter,该 Id 将自动加密,而当您保存或更新数据时,您可以调用 getDecryptedPrimaryKey 来获取实际值。

【讨论】:

  • 这是否会增加处理请求正文时的开销?
  • 当您不想更改现有数据库的任何约束或正在使用旧系统并且您经常需要 POST/PUT 请求中的 Id 时,此解决方案更有用
  • @Harish 不会,因为加密几乎不需要一些时间,您可以将其与服务器端的 JSON 解析器集成。如果您需要更多帮助,请告诉我。我在旧版应用程序中实现了相同的功能。
  • 是的,请帮我详细介绍一下这种实现方式。
  • @Harish 我已经更新了相同的概述.. 将在一段时间内更新整个逻辑。但希望它可能会让你更清楚。
【解决方案2】:

是的,它可以。但将 DB id 公开给客户端并不是最佳实践。您可能必须通过唯一用户名或电子邮件来识别玩家。

【讨论】:

  • 是的,我同意。另外,您能否帮助我提供任何好的在线参考资料,特别是在请求正文中解释最佳实践?
  • 如果你使用 spring 和 angular 这里是一个简单的例子:stackoverflow.com/questions/28039709/…
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
相关资源
最近更新 更多