当前位置: 首页 > 知识库问答 >
问题:

禁用在Spring Data REST中的创建/更新请求中设置审核字段

仲柏
2023-03-14

我正在使用各种Spring组件的组合—Boot(2.3)、Data、Data REST和Springdoc。在我的模型对象中,我使用审计-我用@CreatedBy、@CreatedDate等注释一些字段。我想禁用通过REST API设置这些审计字段值的可能性。同时,我希望在检索数据时可以使用这些信息。

这似乎是很明显的事情,但我找不到一个方法来做到这一点。默认情况下,我可以轻松地在API调用中提供这些值,并看到它们被持久化

理想情况下,这种配置更改在Springdoc生成的OpenAPI规范(在请求模型中)中也是可见的。

共有2个答案

金珂
2023-03-14

我想问题出在你糟糕的设计上。请考虑您的设计是否正确。我想在您的设计中,除了Spring数据RESTendpoint(API)之外,还有其他代码可以创建和更新对象并保存到数据库。

您的问题与Spring数据REST无关。用@Createdxx和@LastModifiedxx注释的审计字段由Spring数据存储库自动更新,Spring数据REST只调用Spring数据存储库来持久化数据。

回答以下两个问题有助于澄清您的设计。

问题1:如果您想保留默认由Spring Data REST创建的创建(POST)endpoint,并且您不希望设置带有@Createdxx注释的审计字段,那么什么代码负责设置这些审计字段?假设您发送一个POST请求来创建一个对象,您希望createdBycreatedDate为空吗?或者createdBycreatedDate稍后会由其他代码更新吗?

问题2:如果您希望在默认情况下保留由Spring数据创建的更新(放置/修补)endpoint,并且不希望更新带有@LastModifiedxx注释的审核字段,那么什么代码负责更新这些审核字段?这也会导致审核不完整(您进行了更新,但上次修改的信息未更新)。

江宏伟
2023-03-14

原来我很傻:)

所以我的错误是当时禁用了身份验证和授权。启用后,我无法为createdBy和其他字段提供值,因为它们只是被正确的值覆盖。

当谈到OpenAPI规范时,我必须用以下内容注释字段:

@Schema(accessMode = Schema.AccessMode.READ_ONLY)

来自io.swagger.v3.oas.annotations.media.Schema;。这导致了正确的信息。请参见Swagger视图:

 类似资料:
  • 问题内容: 我有Spring MVC + JPA应用程序。 我的应用程序中有几个实体在不断变化。我希望能够审核此更改。我发现有一个注释可以跟踪对某些字段或整个实体的更改。我想知道是否有任何方法可以配置此跟踪选项- 我希望能够跟踪更改的内容以及更改的人。还可以对SQL 1个表中的多个实体进行更改吗?还可以跟踪- 实体字段的变化吗? 谢谢 问题答案: 是的,您可以跟踪所做的更改,更新的用户和时间戳。

  • 问题内容: 试图通过Django Rest Framework API调用使我的用户模型成为RESTful,以便我可以创建用户并更新其个人资料。 但是,当我与用户一起执行特定的验证过程时,我不希望用户在创建帐户后能够更新用户名。我尝试使用read_only_fields,但这似乎在POST操作中禁用了该字段,因此在创建用户对象时无法指定用户名。 我该如何实施呢?目前存在的API的相关代码如下。 谢

  • 我正在尝试通过Django Rest Framework API调用使我的用户模型RESTful,这样我就可以创建用户并更新他们的配置文件。 但是,当我与我的用户一起经历一个特定的验证过程时,我不希望用户在创建帐户后能够更新用户名。我试图使用read_only_fields,但是这似乎在POST操作中禁用了该字段,所以我无法在创建用户对象时指定用户名。 我该如何着手实施呢?现在存在的API的相关代

  • 问题内容: 我正在使用对PHP的jQuery AJAX调用来验证登录表单。在php中,我创建一个会话,如果他们选中了“ remember me”复选框,我想创建一个cookie。这是php代码: 会话设置成功,但是cookie完全没有设置。我尝试设置所有值(域,路径等),但没有任何改变。有什么明显的我想念的吗? 问题答案: 以下是一些建议: 确保您指定了正确的日期到期格式 在重定向页面上设置coo

  • 问题内容: 我正在使用Spring Data的审计功能,并且具有与此类似的类: 现在,我相信我已经配置好了审核功能,因为当我更新域对象时,可以看到createdBy,createdDate,lastModifiedBy和lastModifiedDate都获得了正确的值。 但是,我的问题是,当我更新对象时,我丢失了createdBy和createdDate的值。因此,当我第一次创建该对象时,我具有所