【发布时间】: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