Google Cloud Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе - PullRequest
0 голосов
/ 25 сентября 2018

Я создал REST API и загрузил его в Google Cloud.Когда я пытаюсь получить доступ из другого домена, он выдает следующую ошибку:

Запрос перекрестного источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://35.198.15.248:8080/api/clientes/pf/. (Причина: запрос CORS не выполненуспешно).

Затем я добавил следующий класс:

@Configuration
@EnableWebMvc 

public class ConfiguracaoDeCors extends WebMvcConfigurerAdapter {

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("POST, GET, HEAD, DELETE, UPDATE")
            .allowedHeaders("Content-Type", "Authorization")
            .allowCredentials(false)
            .maxAge(32400);
  }
}

И ошибка продолжается.Может ли кто-нибудь помочь?

ADD:

Работает

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .cors()
            .and()
            .csrf().disable()
            .authorizeRequests()
            .antMatchers(PUBLICOS).permitAll()
            .anyRequest().authenticated()
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
    configuration.setAllowedHeaders(Arrays.asList("authorization", "content-type", "x-auth-token"));
    configuration.setExposedHeaders(Arrays.asList("x-auth-token"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать следующую аннотацию в методах класса контроллера, для которых вы хотите разрешить запросы между источниками.

@CrossOrigin(origins = "*", methods = { RequestMethod.POST }, allowedHeaders = "*")
@RequestMapping(value = "/{order}/details", method = { RequestMethod.POST }, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public @ResponseBody Order getOrderDetail(@PathVariable Long order, HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
//...
}

В этом примере все запросы к /123456/details будут разрешать перекрестное происхождение для метода POST.В вашей конфигурации вы разрешаете CORS для всех запросов, и это не очень хорошая практика.

0 голосов
/ 25 сентября 2018

Использование аннотации CrossOrigin, предоставленной spring, может быть полезно в вашем случае:

import org.springframework.web.bind.annotation.CrossOrigin;

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
    System.out.println("==== in greeting ====");
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

Если вы конфигурируете через GlobalConfiguration, фрагмент кода ниже также может быть полезен.

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
        }
    };
}
...