我正在使用弹簧注释@CreatedBy
用于创建者,@LastModifiedBy
用于更新-
@CreatedBy
@Field(value = "createdBy")
private String createdBy;
@LastModifiedBy
@Field(value = "updatedBy")
private String updatedBy;
我也在主应用程序中使用了@EnableMongoAuditing
这个注释。
并创建了一个实现如下AuditorAware
的类-
@Component
public class UserAudtiting implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
String uname = SecurityContextHolder.getContext().getAuthentication().getName();
return Optional.of(uname);
}
}
所以当我使用一些 post 方法来保存数据时,我得到 "createdBy":null 作为响应。
我应该为此做什么?请帮忙!
如文档中指定,
首先,请注意,只有具有@Version批注字段的实体 可以审核创建(否则框架将解释 创建作为更新(。
在实体中添加@Version
。
为了启用审计,我们需要添加到 Spring 配置中。XML 或 JAVA Config,无论哪种方式
Spring XML Configuraton
<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>
Spring Java 配置
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.abc")
@EnableMongoRepositories(basePackages = "com.abc.xyz.repository")
@EnableMongoAuditing
public class MongoApplicationConfiguration {
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
ServerAddress serverAddress = new ServerAddress("127.0.0.1", 27017);
MongoCredential mongoCredential = MongoCredential.createCredential("user", "test", "samp".toCharArray());
MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(mongoCredential));
return new SimpleMongoDbFactory(mongoClient, "test");
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
为了使用@CreatedBy和@LastModifiedBy你需要告诉Spring谁是当前用户。
首先将用户相关字段添加到审核的类中:
@CreatedBy
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
然后创建 AuditorAware 的实现,该实现将获取当前用户(可能来自会话或 Spring 安全性上下文 – 取决于您的应用程序(:
public class UserAudtiting implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
// get your user name here
String uname = SecurityContextHolder.getContext().getAuthentication().getName();
return Optional.of(uname);
}
}
最后一件事是通过对Mongo配置进行少量修改来告诉Spring Data MongoDB有关此审计员感知类的信息:
<mongo:auditing auditor-aware-ref="auditor" />
<bean id="auditor" class="app.demo.UserAudtiting "/>
更多详情请见:https://www.javacodegeeks.com/2013/05/auditing-entities-in-spring-data-mongodb.html