Spring boot security не может автоматически подключить @Repository

Когда я добавил конфигурацию безопасности для весенней загрузки, я наткнулся на эту досадную ошибку:

2017-05-18 15: 23: 29.160 ПРЕДУПРЕЖДЕНИЕ 1806 --- [           main] ationConfigEmbeddedWebApplicationContext: Возникла исключительная ситуация во время инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'securityConfig': не удовлетворен зависимость выражается через поле 'userDetailsService'; вложенное исключение: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем 'userDetailsServiceImpl': неудовлетворенная зависимость, выраженная через поле 'userRepo'; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем userRepository: невозможно создать внутренний бин (внутренний бин)#236c098'типа [org.springframework.orm.jpa.SharedEntityManagerCreator] при установке bean свойство entityManager; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем '(внутренний бин)#236c098': невозможно разрешить ссылку на бин entityManagerFactory при установке аргумента конструктора; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем entityManagerFactory: пост-обработка одноэлементного объекта FactoryBean завершилась неудачно; вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании компонента с именем 'chatController': неудовлетворенная зависимость, выраженная через поле 'userService'; Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем 'userServiceImpl': Неудовлетворенная зависимость, выраженная через поле 'userRepo'; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'userRepository': FactoryBean вызвала исключение при создании объекта; Вложенным исключением является java.lang.NullPointerException

это приложение SpringBoot:

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

это конфигурация безопасности весенней загрузки:

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

и это userRepository, который, кажется, не может быть автоматически подключен при загрузке Spring:

@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

1 ответ

Решение

Я решаю проблему с помощью Autowiring в Securityconfing всех сервисов и репозиториев, которые я использовал.

Другие вопросы по тегам