2014-10-13 4 views
8

я получаю это исключение:Невозможно применить DaoAuthenticationConfigurer к уже построенный объект

[WARN] org.springframework.web.context.support.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'accountResource': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private io.ilopezluna.japanathome.service.UserService io.ilopezluna.japanathome.web.rest.AccountResource.userService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.crypto.password.PasswordEncoder io.ilopezluna.japanathome.service.UserService.passwordEncoder; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: Cannot apply org.springframework.security.config.annotation.aut[email protected]54aa5730 to already built object 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:293) ~[spring-beans-4.0.7.RELEASE.jar:4.0.7.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1186) ~[spring-beans-4.0.7.RELEASE.jar:4.0.7.RELEASE] 

Вы можете видеть больше на https://travis-ci.org/ilopezluna/japan-at-home/builds/37866955

Это исключение во время моего исполнения тестов. Но я не могу воспроизвести его на своем локальном хосте, я всегда получаю успех сборки: S

+0

Упс, извините, обновлено! – ilopezluna

+1

Сохраняется ли какая-либо конфигурация как статическое свойство? Можем ли мы увидеть 'SecurityConfiguration.configureGlobal'? Существует некоторая магия (http://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/testing.html#testcontext-ctx-management) за управление контекстом Spring в модульные тесты, чтобы они могли быть сломаны. –

+0

уверен! здесь вы можете увидеть упомянутый метод: https://github.com/ilopezluna/japan-at-home/blob/master/src/main/java/io/ilopezluna/japanathome/config/SecurityConfiguration.java – ilopezluna

ответ

11

Мне потребовались два дня, но я считаю, что, наконец, решил это. В моем SecurityConfiguration классе я имел следующий метод:

@Configuration 
@EnableWebMvcSecurity 
@EnableGlobalMethodSecurity(jsr250Enabled=true, prePostEnabled=true) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

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

} 

я заменил метод configureGlobal с помощью метода configure:

@Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(authenticationService); 
    } 

А теперь все работает отлично.

В соответствии с this answer Разница заключается в том, что с помощью configureGlobal позволит AuthenticationManager глобальным или безопасности метода другого HttpSecurity (WebSecurityConfigurerAdapter).

Как вы можете видеть выше, я включаю как защиту Web Mvc, так и глобальную защиту методов. Согласно моим модульным тестам, оба продолжают работать с этим изменением, но в моем офисе есть некоторые дебаты о том, правильно ли это изменение (т. Е. Если оно правильно настраивает глобальную безопасность метода), или если есть другая проблема с этим решением.

Мы считаем, что основной причиной проблемы является некоторая ошибка Spring, возможно, состояние гонки. Как маловероятно, как кажется, проблема проявилась только тогда, когда мы добавили пустой проект в проект, неважно, какой был пакет или имя класса.

+3

Вероятно, вы столкнулись с круговыми ссылками на бобовые, которые не очень хорошо обрабатываются при использовании BeanPostProcessors (защита метода). Если у вас есть образец, который воспроизводит проблему, я бы посоветовал вам сообщать об ошибке на странице https://jira.spring.io/browse/SEC/. Используете ли вы загрузку, если это возможно, связано с https: // jira.spring.io/browse/SEC-2661 –

+0

@RobWinch - похоже, что SEC-2661 - проблема, спасибо! – JBCP

 Смежные вопросы

  • Нет связанных вопросов^_^