10

私はこの例外を受けています:

[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.authentication.configurers.userdetails.DaoAuthenticationConfigurer@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/illopezluna/japan-at-home/builds/37866955で詳細を確認できます

この例外は、テストの実行中にスローされます。しかし、ローカルホストで再現することはできません。常にビルドが成功します:S

4

1 に答える 1

13

2日かかりましたが、ようやく解決したと思います。私の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);
    }

そして今、すべてがうまくいきます。

この回答によると、違いは、グローバル メソッド セキュリティまたは別の HttpSecurity (WebSecurityConfigurerAdapter) による使用configureGlobalが許可されることです。AuthenticationManager

上記のように、Web Mvc セキュリティとグローバル メソッド セキュリティの両方を有効にしています。私の単体テストによると、どちらもこの変更で引き続き動作しますが、この変更が正しいかどうか(つまり、グローバル メソッド セキュリティを正しく構成しているかどうか)、またはこれに別の問題があるかどうかについて、私のオフィスでいくつかの議論があります。解決。

この問題の根本的な原因は、何らかの種類の Spring バグであり、おそらく競合状態であると考えています。ありそうもないことですが、空のクラスをプロジェクトに追加したときにのみ問題が発生し、クラスのパッケージや名前が何であるかは問題ではありませんでした。

于 2014-10-28T18:36:58.030 に答える