Ошибка CORS в Google App Engine на java server

У меня есть два приложения.

Фронтенд (Angular) работает на Firebase

Backend Spring Boot (Java11) работает в приложении Движок

Получил эту ошибку при попытке доступа к любым конечным точкам в движке приложения «Доступ заблокирован политикой CORS: ответ на предполетный запрос не проходит проверку контроля доступа: нет« Access-Control-Allow-Origin » заголовок присутствует на запрошенном ресурсе "

Интересно, что на моем локальном компьютере все работает нормально. Проблем с cors нет. Итак, я предполагаю, что проблема в конфигурации движка приложения или что-то еще.

Может Кто-нибудь поможет мне решить эту проблему? Я уже потратил много времени, пытаясь ее исправить. Я уже читал много похожих проблем с stackoverflow. Последний: как настроить CORS в приложении Spring Boot + Spring Security?

Не могу найти ничего полезного в документах Google.

файл app.yaml

runtime: java11
instance_class: F4
vpc_access_connector:
  name: projects/<project_id>/locations/<location>/connectors/<connectors_name>

Вот мои файлы конфигурации:

CorsFilterConfig.java

@Configuration
public class CorsFilterConfig {
    
    @Value("${allowed-origin}")
    private String allowedOrigin;

    @Bean
    public FilterRegistrationBean<CorsFilter> simpleCorsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.setAllowedOrigins(Collections.singletonList(allowedOrigin));
        config.setAllowedMethods(Collections.singletonList("*"));
        config.setAllowedHeaders(Collections.singletonList("*"));
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

allowedOrigin указывает на https: //

SecurityConfig.java

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .csrf().disable()
                .authorizeRequests().anyRequest().authenticated()
                .and()
                .oauth2Login()
                .and()
                .oauth2ResourceServer().jwt();

Пример конечной точки

@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {

    @GetMapping
    public String hello() {
        return "hello world";
    }
}

Я предполагаю, что вы не можете использовать app.yaml для управления заголовками HTTP для динамических обработчики. Это применимо только для статического контента

Вот почему эту конфигурацию не удается развернуть с этой ошибкой «Неожиданный атрибут« http_headers »для сценария типа сопоставления.»

runtime: java11
instance_class: F4
vpc_access_connector:
  name: projects/<project_id>/locations/<location>/connectors/<connectors_name>
handlers:
  - url: /.*
    script: auto
    http_headers:
      Access-Control-Allow-Origin: *
0
задан 4 November 2020 в 00:29
3 ответа

У меня были неправильные URL-адреса разрешенного происхождения в моих свойствах. Итак, конфигурационные файлы и вся конфигурация cors в моем вопросе верны.

0
ответ дан 4 January 2021 в 09:32

Проблема в том, что CORS необходимо разрешить в приложении ядра приложения.

Это можно сделать в app.yaml , добавив обработчик для включения заголовков CORS следующим образом:

runtime: java11
instance_class: F4
vpc_access_connector:
  name: projects/<project_id>/locations/<location>/connectors/<connectors_name>
- url: /.*
  script: auto
  http_headers:
    Access-Control-Allow-Origin: *

Это позволит вызовам CORS поступать из любого домена, если вы хотите, чтобы он был более конкретным, чтобы разрешить только свое приложение firebase, вы можете изменить * на URL-адрес приложения firebase

1
ответ дан 4 January 2021 в 09:32

Вам нужно добавить Access-Control-Allow-Origin в заголовки и ответить на запрос Попробуйте использовать следующие блоки кода

 header := w.Header()
 header.Add("Access-Control-Allow-Origin", "*")

Ответить на первоначальный запрос

if r.Method == "OPTIONS" {
    w.WriteHeader(http.StatusOK)
    return
}
1
ответ дан 4 January 2021 в 15:38

Теги

Похожие вопросы