Неверный запрос CORS для почтового вызова?

Request URL: ******
Request Method: OPTIONS
Status Code: 403 
Remote Address: ****
Referrer Policy: no-referrer-when-downgrade

Для браузера после звонка, показывающего его как ВАРИАНТЫ.

Ниже приведен код сервера:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            System.out.println("onboard cors");

            registry.addMapping("/**").allowedMethods("GET", "PUT", "POST", "DELETE", "OPTIONS").allowedOrigins("*").allowedHeaders("*");
        }
    };
}

Приведенный выше код работает нормально, когда я напрямую вызываю соответствующую службу.

Но получая ошибку «недопустимый запрос cors» при вызове службы через шлюз zuul api.

Любые предложения плз?


person Karthik P    schedule 14.11.2018    source источник
comment
Это предварительная проверка браузером, и чтобы избавиться от нее, вы должны реализовать перекрестное происхождение, я просто добавил аннотацию CrossOrigin в свои контроллеры и работал. Если в вашем проекте есть Spring Security, добавленной вами конфигурации недостаточно.   -  person Incepter    schedule 14.11.2018
comment
Привет Мохамед, я попробовал вышеуказанный метод, но не сработал. Я пробовал 3 способа: 1. Глобальный CORS 2. Уровень контроллера 3. Уровень метода   -  person Karthik P    schedule 14.11.2018
comment
Приведенный выше код работает, но мы используем шлюз zuul api, вызывая почтовый вызов через шлюз zuul api, не работает. Позвонив в соответствующий сервис напрямую, он работает нормально.   -  person Karthik P    schedule 14.11.2018
comment
Жаль слышать это, но я думаю, вы, должно быть, упомянули, что проблема находится на уровне zuul, а не в самом микросервисе. Удачи   -  person Incepter    schedule 15.11.2018


Ответы (2)


Ваш браузер сначала проверяет, безопасен ли метод POST для отправки в конечную точку, и если да, то выполняет запрос POST. Вы должны предоставить разрешения для метода OPTIONS и ответить на него Allow: GET, HEAD, POST, и все должно быть в порядке. Я столкнулся с этой проблемой при работе с Python, поэтому все дело в CORS и не зависит от платформы.

См. дополнительную информацию об этом здесь

person barbarian    schedule 14.11.2018

Следующее решение сработало для меня.

Добавьте приведенный ниже код в проект zuul:

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new org.springframework.web.filter.CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

Добавлять код corsfilter во все микросервисы не требуется.

Ссылка: https://stackoverflow.com/a/46277194/4132466

person Karthik P    schedule 14.11.2018