Стандартный App Engine с CORS Spring Boot не работает - PullRequest
0 голосов
/ 25 октября 2019

Я реализую приложение Spring Boot, которое размещено в стандартной среде Google App Engine.

Я настроил CORS следующим образом, следуя официальному руководству :

@Configuration
@EnableWebSecurity
class WebSecurityConfigurer : WebSecurityConfigurerAdapter() {

    @Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        http.csrf()
            .disable()
            .cors()
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeRequests().antMatchers("/api/**").permitAll()
    }

    @Bean
    fun corsConfigurationSource(): CorsConfigurationSource {
        val configuration = CorsConfiguration()
        configuration.allowedOrigins = listOf("*")
        configuration.allowedMethods = listOf("GET", "POST", "OPTIONS", "PUT", "DELETE", "HEAD")
        val source = UrlBasedCorsConfigurationSource()
        source.registerCorsConfiguration("/**", configuration)
        return source
    }

при выполнении следующего cURL я получаю заголовок AllowedOrigins по мере необходимости:

curl -H "Access-Control-Request-Method: GET" -H "Origin: http://foo" -X OPTIONS "localhost:8080/api/abc/list?lang=de"

Ответ:

HTTP/1.1 200 
Access-Control-Allow-Origin: *

Теперь, когда я развернул свойSpring App to AppEngine, я также могу успешно cURL.

HTTP/2 200 
access-control-allow-origin: https://myfrontend.com
access-control-allow-methods: GET
access-control-allow-credentials: true

К сожалению, мое приложение Frontend заблокировано 403

Access to fetch at 'https://mybackend.com/api/abc/list?lang=de' from origin 'https://myfrontend.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Любые советы?

Спасибо.

1 Ответ

0 голосов
/ 25 октября 2019

Я думаю, что вы пропустили важные заголовки установки деталей в cors.

Добавьте эту строку

configuration.allowedHeaders = listOf("*")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...