【问题标题】:How to configure Auditing via Java Config in Spring Data (and Spring Data Rest)?如何在 Spring Data(和 Spring Data Rest)中通过 Java Config 配置审计?
【发布时间】:2015-07-05 00:44:14
【问题描述】:

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

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

我的问题是:

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

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 ...

以及配置:

@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;
        }
    }

}

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

【问题讨论】:

    标签: java spring-data spring-data-jpa spring-data-rest


    【解决方案1】:

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

    答案:不,您不需要定义AuditingEntityListener bean。相反,您需要在域类中指定 @EntityListeners(AuditingEntityListener.class)

    例如

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

    2) 我在以下代码中是否缺少其他配置来设置自动审核?

    回答:其他配置设置看起来不错。

    3) 我正在调用从 POST 到 Spring Data Rest 的创建代码,将此审计功能与 Spring Data Rest 结合使用是否有任何特殊注意事项?

    回答:我认为不会。尝试上述建议的更改。它应该可以工作。

    【讨论】:

    • “在您的域类上指定 @EntityListeners(AuditingEntityListener.class)”是关键的缺失步骤!这在参考文档中没有提到,这应该是一个 jira 问题。
    • @Jay,Spring Data Jpa 参考文档中提到过。 docs.spring.io/spring-data/jpa/docs/current/reference/html/… 。只是它是 XML 配置,而不是 Java 配置。
    • 这就是我的意思:java 配置中没有提到它。感谢您的回复!
    • 我有点困惑。如果我的每个实体都需要不同的侦听器怎么办? @EntityListeners(EntityFooValidationListener) 我是否需要确保我的听众扩展 AuditingEntityListener ,声明两者或完全其他?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多