Spring Data MongoDB 1.2.0静默引入了新功能:支持基本审核 。 因为您不会在本文的官方参考中找到太多有关它的信息,所以我将展示它带来的好处,如何配置Spring以进行审计以及如何对文档进行注释以使其可审计。 审核使您可以声明性地告诉Spring存储:
- 文档创建的日期: @CreatedDate
- 上次文档更新的日期: @LastModifiedDate
- 创建文档的用户: @CreatedBy
- 最近更新的用户: @LastModifiedBy
- 当前文档版本: @Version
组态
首先,Maven依赖于最新的Spring Data MongoDB和Spring Data Commons。 另外,为了使用与日期相关的审计注释,我们需要在类路径中添加joda-time 。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
为了启用审计,我们需要在Spring配置中添加<mongo:auditing /> 。 当前无法通过Java Config对其进行配置。
<mongo:auditing />
<mongo:mongo id="mongo" />
<bean class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo" />
<constructor-arg name="databaseName" value="blog-tests" />
</bean>
用法
上面的配置为我们提供了包括版本控制和时间戳在内的审计方法。 示例文档如下所示:
@Document
public class Item {
@Id
private String id;
...
@Version
private Long version;
@CreatedDate
private DateTime createdAt;
@LastModifiedDate
private DateTime lastModified;
...
}
现在,您可以使用MongoTemplate或存储库保存文档,并且所有带注释的字段均已自动设置。
您可能已经注意到,我在这里没有使用用户相关的注释@CreatedBy和@LastModifiedBy 。 为了使用它们,我们需要告诉Spring谁是当前用户。
首先,将与用户相关的字段添加到审核的类中:
@CreatedBy
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
然后创建您的AuditorAware实现,该实现将获取当前用户(可能从会话或Spring Security上下文中获取-取决于您的应用程序):
public class MyAppAuditor implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
// get your user name here
return "John Doe";
}
}
最后一件事是通过对Mongo配置进行少量修改来告诉Spring Data MongoDB有关此审计师的类:
<mongo:auditing auditor-aware-ref="auditor" />
<bean id="auditor" class="pl.maciejwalkowiak.blog.MyAppAuditor"/>
翻译自: https://www.javacodegeeks.com/2013/05/auditing-entities-in-spring-data-mongodb.html