【问题标题】:Auditing with spring-data-mongodb使用 spring-data-mongodb 进行审计
【发布时间】:2017-05-22 15:59:45
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

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


    【解决方案1】:

    1 : 确保你有spring-data-mongodb

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

    class ClassName {
    
        .......
    
      @CreatedDate
      private DateTime createdDate;
    
      @LastModifiedDate
      private DateTime @lastModifiedDate;
    
    }
    

    3:如果你使用@CreatedBy@LastModifiedBy,那么你必须实现AuditorAware<T> SPI接口

    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();
      }
    }
    

    【讨论】:

      【解决方案2】:

      您能否检查您是否有Spring Data MongoDB 依赖1.9.4.RELEASE 或更高版本,因为mongoAuditingHandler 需要MappingMongoConverter,它在1.9.4.RELEASE 或更高版本中可用,根据更新日志-spring-data-mongodb-changelog,例如:

      <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-mongodb</artifactId>
          <version>1.9.4.RELEASE</version>
      </dependency>
      

      【讨论】:

      • 我使用的是 1.9.5.RELEASE。您能否提供有关如何使用 MappingMongoConverter 的指示。
      • 发现问题。我的配置类没有扩展 AbstractMongoConfiguration。
      猜你喜欢
      • 2019-11-17
      • 2012-11-15
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2019-08-08
      相关资源
      最近更新 更多