0

当我向 Spring Boot 添加安全配置时,我遇到了这个烦人的错误:

2017-05-18 15:23:29.160 WARN 1806 --- [main] ationConfigEmbeddedWebApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“securityConfig”的bean时出错:不满意通过字段“userDetailsS​​ervice”表示的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'userDetailsS​​erviceImpl' 的 bean 时出错:通过字段 'userRepo' 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“userRepository”的 bean 时出错:无法创建类型为 [org.springframework.orm.jpa. SharedEntityManagerCreator] 同时设置 bean 属性 'entityManager'; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为“(内部 bean)#236c098”的 bean 时出错:设置构造函数参数时无法解析对 bean 'entityManagerFactory' 的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为“entityManagerFactory”的 bean 时出错:FactoryBean 的单例对象的后处理失败;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“chatController”的 bean 时出错:通过字段“userService”表示的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: Error created bean with name ' userServiceImpl':通过字段'userRepo'表达的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“userRepository”的 bean 时出错:FactoryBean 在创建对象时抛出异常;嵌套异常是 java.lang.NullPointerException

这是springBootApplication

public class Ailab4finalApplication {

    public static void main(String[] args) {
        SpringApplication.run(Ailab4finalApplication.class, args);
    }

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("validation");
        return messageSource;
    }
}

这是spring boot security的配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private Environment env;

    @Bean(name="passwordEncoder")
    public PasswordEncoder getPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/webjars/**", "/css/**", "/registration", "/", "/home").permitAll()
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
        http.csrf().disable();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
    }
}

这似乎不能被Spring引导自动装配的userRepository :

@Repository
public interface UserRepository extends  CrudRepository<UserHibernate, Long> {
   @Query("select u from UserHibernate u where u.email = ?1")
   public UserHibernate findByEmail(String email);

   @Query("select u from UserHibernate u where u.nickname = ?1")
   public UserHibernate findByNickname(String nickname);

   @Query("select u from UserHibernate u where u.id = ?1")
   public UserHibernate findById(Long id);
}

最后,这是我的项目树:

src:
   -Ailab4finalApplication.java
   -DatabaseConfig.java
   -SecurityConfig.java
src/services:
   -SecurityService.java
   -SecurityServiceImpl.java
   -UserDetailsServiceImpl.java
   -UserService.java
   -UserServiceImpl.java
src/jpa_repositories:
   -SecurityService.java
   -SecurityServiceImpl.java
   -UserDetailsServiceImpl.java
   -UserService.java
   -UserServiceImpl.java
4

1 回答 1

0

我通过自动装配到 Securityconfing 我使用的所有服务和存储库来解决问题。

于 2017-05-21T14:05:52.937 回答