繁体   English   中英

如何在Spring Boot中使用DynamoDB实施审核?

[英]How to implement Auditing with DynamoDB in Spring Boot?

我有dynamoDB数据库,其中有一个名为user的表。 我想在此表中记录审核( CreatedByLastModifiedByCreatedDateLastModifiedDate )。

我发现JPA审计( 从此处开始 )和MongoDB审计分别带有注释@EnableJpaAuditing@EnableMongoAuditing 但是很明显,他们没有使用dynamoDB。

这是我的抽象审计类:

    @DynamoDBDocument
public abstract class PQSSAbstractAuditingEntity implements Serializable{
    @CreatedBy
    @JsonIgnore
    @DynamoDBAttribute
    private String createdBy;

    @LastModifiedBy
    @JsonIgnore
    @DynamoDBAttribute
    private String lastModifiedBy;

    @CreatedDate
    @JsonIgnore
    @DynamoDBAttribute
    private Date createdDate;

    @LastModifiedDate
    @JsonIgnore
    @DynamoDBAttribute
    private Date lastModifiedDate = new Date();

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public String getLastModifiedBy() {
        return lastModifiedBy;
    }

    public void setLastModifiedBy(String lastModifiedBy) {
        this.lastModifiedBy = lastModifiedBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Date getLastModifiedDate() {
        return lastModifiedDate;
    }

    public void setLastModifiedDate(Date lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
}

我已经为各个字段分配了日期,但是我必须根据登录的用户设置createdBylastModifiedBy 因此,当新条目添加到数据库中时,我必须在运行时动态获取。 我知道如何静态设置这些字段,但是问题是如何在运行时使注释知道这些更改。

正如我提到的,我已经找到了AuditAware于JPA和mongo的AuditAware 对于dynamoDB,我需要相同的内容。

任何帮助将不胜感激。 因为我是Spring Boot的新手。

注释@DynamoDBAutoGeneratedTimestamp可以与DynamoDBAutoGenerateStrategy一起使用来审核项目。

策略创建(用于创建审核):-

@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.CREATE)
 public Date getCreatedDate() { return createdDate; }
 public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; }

始终使用策略(如果您希望最后一次修改日期,请使用此策略):-

 @DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.ALWAYS)
 public Date getLastUpdatedDate() { return lastUpdatedDate; }
 public void setLastUpdatedDate(Date lastUpdatedDate) { this.lastUpdatedDate = lastUpdatedDate; }

如果要创建时间戳和最后修改的时间戳,请创建两个不同的属性。 一个属性应使用CREATE策略,另一属性应使用ALWAYS策略。

AutoGeneratedTimeStamp

这个问题已经存在多年了,但是如果有人也有这个问题,下面的解决方案将起作用。

问题是@EnableDynamoDBAuditing@EnableDynamoDBRepositories无法一起正常工作。 要解决此问题,您必须将两个注释都添加到配置类中,创建AuditorAwareDateTimeProvider Bean,并将所有实体/文档手动添加到DynamoDBMappingContext

PersistenceConfiguration.java

@Configuration
@EnableDynamoDBAuditing(auditorAwareRef = "userAuditing", dateTimeProviderRef = "dateAuditing")
@EnableDynamoDBRepositories(basePackages = "your.repository.package.name")
public class PersistenceConfiguration {

    @Bean
    public AuditorAware<String> userAuditing() {
        return () -> Optional.of("TestUser"); //get username from SecurityContext
    }

    @Bean
    public DateTimeProvider dateAuditing() {
        return CurrentDateTimeProvider.INSTANCE;
    }

    @Bean
    public DynamoDBMappingContext dynamoDBMappingContext() {
        DynamoDBMappingContext mappingContext = new DynamoDBMappingContext();

        //add your 'entities' manually 
        mappingContext.getPersistentEntity(YourEntity.class); 

        return mappingContext;
    }

    // do further configuration stuff...
}

YourEntity.java

@DynamoDBTable(tableName = "YourEntity")
public class YourEntity {
   @CreatedDate
   @DynamoDBAttribute
   @DynamoDBTypeConverted(converter = LocalDateTimeConverter.class)
   private LocalDateTime createdOn;

   @CreatedBy
   @DynamoDBAttribute
   private String createdBy;

   @LastModifiedDate
   @DynamoDBAttribute
   @DynamoDBTypeConverted(converter = LocalDateTimeConverter.class)
   private LocalDateTime updatedOn;

   @LastModifiedBy
   @DynamoDBAttribute
   private String updatedBy;

   // add further properties...
}

我知道还有其他解决方案,例如@DynamoDBAutoGeneratedTimestamp及其策略的使用,但是在我看来,这是关于使用spring的最干净的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM