Aller au contenu

Configuration des CORS

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.