1. ホーム
  2. ジャワ

SpringBootの除外自動設定

2022-02-27 17:32:43

SpringBootの自動構成は、私たちの開発に大きな利便性をもたらしましたが、時には問題ももたらしました。

問題のシナリオ

プロジェクトは、Springboot + dubboマイクロサービスアーキテクチャに基づいて、フレームワークの構造ウェブ+ファサード+サービスは、ファサードのモジュールは、順序でインターフェイスを継承するために、Spring Securityのpomファイルを参照し、サービスの結果、ファサードのインターフェイスの開始回を実装する春セキュリティXXXConfiguration XXXMethodが見つかりません、関連するインターフェイスで春セキュリティを達成するため、Web層で呼ばれる、温層が実際に春セキュリティを継承する必要なので、サービスは春セキュリティ関連の自動設定を除外する必要があることです。

解決プロセス

まず、エラーメッセージを投稿してください。

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method setAuthenticationConfiguration in org.springframework.security.config.annotation.web.configuration. WebSecurityConfigurerAdapter required a bean of type 'org.springframework.security.config.annotation.authentication.configuration. AuthenticationConfiguration' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.config.annotation.authentication.configuration. AuthenticationConfiguration' in your configuration.

  エラーメッセージから、springboot が WebSecurityConfigurerAdapter の設定にエラーを起こしたことがわかります。springboot はまだ非常に使いやすく、起動時にデバッグログレベルをオンにするとすべての AutoConfiguration 情報を出力するので、起動時のログを検索して WebSecurityConfigurerAdapter を見つけてください。

2019-01-15 20:10:30.880 [main] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Finished creating instance of bean ' managementContextResolver'
2019-01-15 20:10:30.887 [main] DEBUG o.s.beans.factory.annotation.InjectionMetadata - Registered injected element on class [org. springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter$$ EnhancerBySpringCGLIB$$3db9a4ce]: AutowiredMethodElement for public void org.springframework.security.config.annotation.web. configuration.WebSecurityConfigurerAdapter.setApplicationContext(org.springframework.context.)
2019-01-15 20:10:30.887 [main] DEBUG o.s.beans.factory.annotation.InjectionMetadata - Registered injected element on class [org. springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter$$ EnhancerBySpringCGLIB$$3db9a4ce]: AutowiredMethodElement for public void org.springframework.security.config.annotation.web. configuration.WebSecurityConfigurerAdapter.setTrustResolver(org.springframework.security.authentication. AuthenticationTrustResolver)
2019-01-15 20:10:30.888 [main] DEBUG o.s.beans.factory.annotation.InjectionMetadata - Registered injected element on class [org. springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter$$ EnhancerBySpringCGLIB$$3db9a4ce]: AutowiredMethodElement for public void org.springframework.security.config.annotation.web. configuration.WebSecurityConfigurerAdapter.setContentNegotationStrategy(org.springframework.web.acceptance.ContentNegotiationStrategy)
2019-01-15 20:10:30.888 [main] DEBUG o.s.beans.factory.annotation.InjectionMetadata - Registered injected element on class [org. springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter$$ EnhancerBySpringCGLIB$$3db9a4ce]: AutowiredMethodElement for public void org.springframework.security.config.annotation.web. configuration.WebSecurityConfigurerAdapter.setAuthenticationConfiguration(org.springframework.security.config.annotation. authentication.configuration.AuthenticationConfiguration)
2019-01-15 20:10:30.888 [main] DEBUG o.s.beans.factory.annotation.InjectionMetadata - Registered injected element on class [org. springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter$$ EnhancerBySpringCGLIB$$3db9a4ce]: AutowiredMethodElement for public void org.springframework.security.config.annotation.web. configuration.WebSecurityConfigurerAdapter.setObjectPostProcessor(org.springframework.security.config.annotation. ObjectPostProcessor)
2019-01-15 20:10:30.888 [main] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Eagerly caching bean 'org.springframework.boot. actuate.autoconfigure.ManagementWebS

ログメッセージから、WebSecurityConfigurerAdapterの設定を読み込むのはManagementWebSecurityAutoConfigurationであることがわかり、springboot起動クラスで除外を追加すればよいことがわかりました。

@SpringBootApplication(exclude={SecurityAutoConfiguration.class, OAuth2AutoConfiguration.class,SecurityFilterAutoConfiguration. class,ManagementWebSecurityAutoConfiguration.class})