如何在Spring Data(和Spring Data Rest)中通过Java Config配置审计?

Jay*_*Jay 6 java spring-data spring-data-jpa spring-data-rest

我正在尝试使用Spring Data的审计功能(与Spring Boot和Spring Data Rest结合使用),但审计字段未在保存时设置.所有保存都会导致尝试保存空"创建者"的约束异常.

根据spring数据文档,我应该能够在我的实体上放置适当的审计注释(@ CreatedDate/etc),并使AuditorAware <>可用于应用程序上下文.我知道我的审计员​​知道bean是通过在调试器中设置断点来创建的.

我的问题是:

1)我是否有必要创建一个AuditingEntityListener,或者我是否应该通过@EnableJpaAuditing提供一个?(在关于java配置的文档中不清楚)

2)下面的代码中是否有其他配置我缺少设置自动审核?

3)我正在调用从POST到Spring Data Rest的创建代码,将这个审计功能与Spring Data Rest结合使用有什么特别的警告吗?

@Entity
public class Tag implements Serializable {

    // ... other fields omitted...

    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    private Date created = new Date();

    @CreatedBy
    @Basic(optional = false)
    @Column(name = "CREATED_BY", nullable = false, length = 24)
    private String createdBy = "";

    @LastModifiedDate
    @Basic(optional = false)
    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date updated = new Date();

    @LastModifiedBy
    @Basic(optional = false)
    @Column(name = "UPDATED_BY", nullable = false, length = 24)
    private String updatedBy = "";

    // ... getters and setters were generated ...
Run Code Online (Sandbox Code Playgroud)

和配置:

@EnableJpaAuditing
@Configuration
public class AuditingConfig {

    @Bean
    public AuditorAware<String> createAuditorProvider() {
        return new SecurityAuditor();
    }

    @Bean
    public AuditingEntityListener createAuditingListener() {
        return new AuditingEntityListener();
    }

    public static class SecurityAuditor implements AuditorAware<String> {
        @Override
        public String getCurrentAuditor() {
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
            String username = auth.getName();
            return username;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助,谢谢!

Nit*_*ora 10

1)我是否有必要创建一个AuditingEntityListener,或者我是否应该通过@EnableJpaAuditing提供一个?(在关于java配置的文档中不清楚)

答:不,你不需要定义AuditingEntityListenerbean.相反,您需要@EntityListeners(AuditingEntityListener.class)在您的域类上指定.

例如

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Tag implements Serializable {

}
Run Code Online (Sandbox Code Playgroud)

2)下面的代码中是否有其他配置我缺少设置自动审核?

答:其他配置设置看起来很好.

3)我正在调用从POST到Spring Data Rest的创建代码,将这个审计功能与Spring Data Rest结合使用有什么特别的警告吗?

答:我认为不是.尝试以上建议的更改.它应该工作.