LoginSignup
0
0

More than 3 years have passed since last update.

Spring Bootの@WebMvcTestテストでSpring Securityのデフォルトセキュリティが有効化される

Last updated at Posted at 2020-10-11

Spring Boot 2.3.4.RELEASEでWebFluxとSecurityを使用している際、
コントローラーなどのテストのために@WebMvcTestを付与しているテストで
WebTestClientでコントローラーにリクエストを行うと、何故かBasic認証を求められた。

確かにSpring Securityを利用しているプロジェクトではあるが、Basic認証などは利用していない。

原因に検討が付かなかったが、GitHubにissueが存在した。

要約すると、@WebFluxTestでは@Conroller@ControllerAdvice, WebFluxConfigurerなど、コントローラー関係の@Beanは構成されるが、@Service@Beanは構成されない。

ただし、@Configurationが付与されたクラスは@Beanとして生成はされるようだ。
そして、その中から条件に一致する@Beanのみが生成されるらしい。

Spring SecurityのWebFlux向けのセキュリティ構成をしている場合、多くの場合ドキュメントに記載されている以下のような構成を用意することになる。

@Configuration
@EnableWebFluxSecurity
public class SecurityConfiguration {

    @Bean
    public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
        // do stuff
    }
}

このときSecurityWebFilterChainは生成されないが、SecurityConfigurationと一緒に@EnableWebFluxSecurityがスキャンされる。

@EnableWebFluxSecurityの定義を見ると@Import(WebFluxSecurityConfiguration.class)が付与されている。

WebFluxSecurityConfigurationはデフォルトのSecurityWebFilterChainを生成する

こういった流れで@WebFluxTestが付与されたテストでSpring Securityのデフォルトセキュリティが適用されるらしい。

対応策としてはプロジェクトで用意しているSecurityWebFilterChainを生成する@Configurationを明示的に@Importするしかないらしい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0