Voici un exemple qui fonctionne (Spring Boot 3.2) :
@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { return http .csrf { it.disable() } .cors { it.configurationSource { CorsConfiguration().applyPermitDefaultValues() } } .authorizeHttpRequests { it.dispatcherTypeMatchers( DispatcherType.ERROR ).permitAll() it.requestMatchers("/public/**").permitAll() it.requestMatchers("/actuator/**").permitAll() it.anyRequest().authenticated() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .oauth2ResourceServer { it.jwt { it.decoder(jwtDecoder()) } } .userDetailsService(userDetailsService) .build() }
La ligne qui nous intéresse est la ligne 5 :
.cors { it.configurationSource { CorsConfiguration().applyPermitDefaultValues() } }
On peut facilement voir qu’on applique la configuration par défaut (qui consiste en fait à « Tout permettre »).
Si on a besoin d’une configuration plus précise, on peut appliquer des réglages fins à la CorsConfiguration, de cette manière :
@Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { return http .csrf { it.disable() } .cors { it.configurationSource { CorsConfiguration().apply { addAllowedHeader("*") addAllowedMethod("*") addAllowedOrigin("*") } } } .authorizeHttpRequests { it.dispatcherTypeMatchers( DispatcherType.ERROR ).permitAll() it.requestMatchers("/public/**").permitAll() it.requestMatchers("/actuator/**").permitAll() it.anyRequest().authenticated() } .sessionManagement { it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) } .oauth2ResourceServer { it.jwt { it.decoder(jwtDecoder()) } } .userDetailsService(userDetailsService) .build() }
Bon, dans ce cas-ci j’y ai reproduit la même config que applyPermitDefaultValues, mais voyez le principe.