java - 使用 spring-data-mongodb 进行审计

标签 java spring mongodb spring-boot spring-data-mongodb

我正在尝试使用 spring data mongodb 启用自动审计字段,如 here 所述.下面是我的配置类

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.abc")
@EnableMongoRepositories(basePackages = "com.abc.xyz.repository")
@EnableMongoAuditing
public class ApplicationConfiguration {

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
        ServerAddress serverAddress = new ServerAddress("127.0.0.1", 27017);
        MongoCredential mongoCredential = MongoCredential.createCredential("user", "test", "abc123".toCharArray());
        MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(mongoCredential));
        return new SimpleMongoDbFactory(mongoClient, "test");
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

但是当我添加@EnableMongoAuditing 时,我在启动服务器时收到以下错误。

Caused by: java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoAuditingHandler': Cannot create inner bean '(inner bean)#6dca0c34' of type [org.springframework.data.mongodb.config.MongoAuditingRegistrar$MongoMappingContextLookup] while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '(inner bean)#6dca0c34': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [org.springframework.data.mongodb.core.convert.MappingMongoConverter] found for dependency [org.springframework.data.mongodb.core.convert.MappingMongoConverter]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.data.mongodb.core.convert.MappingMongoConverter] found for dependency [org.springframework.data.mongodb.core.convert.MappingMongoConverter]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:236)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)

最佳答案

1 : 确保您拥有 spring-data-mongodb

2 : 如果您使用 @CreatedDate@LastModifiedDate那么你不需要任何额外的配置。

class ClassName {

    .......

  @CreatedDate
  private DateTime createdDate;

  @LastModifiedDate
  private DateTime @lastModifiedDate;

}

3:如果您使用的是 @CreatedBy@LastModifiedBy那么你必须执行AuditorAware<T> SPI接口(interface)

class ClassName {

    .......

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;

}

public class AppAuditor implements AuditorAware<String> {

    @Override
    public String getCurrentAuditor() {

        // get your user name here
        return "xxxx";
    }

}

从spring doc实现基于Spring Security的AuditorAware

class SpringSecurityAuditorAware implements AuditorAware<User> {

  public User getCurrentAuditor() {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

    if (authentication == null || !authentication.isAuthenticated()) {
      return null;
    }

    return ((MyUserDetails) authentication.getPrincipal()).getUser();
  }
}

关于java - 使用 spring-data-mongodb 进行审计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530270/

相关文章:

java - GXT 中的文件上传会歧视某些文件类型

java - 测试 Hibernate 映射 : no persistent classes found for query classes

java - Spring:环境特定配置

node.js - Mongoose ODM findOneAndUpdate 子文档

MongoDB MapReduce 奇怪的结果

java - 从Consumer端创建主题

java - 将时间设置为 00 :00:00

java - Spring:为什么我们 Autowiring 接口(interface)而不是实现的类?

java - spring中如何子类并发控制,抛出什么异常?

mysql - 结合 MySQL、Sphinx 和 MongoDB。好主意?