Tomcat включает CORS: запрос POST от Safari возвращает 200, Chrome и Firefox возвращают 403

У меня есть серверная часть, работающая на Tomcat 8.5, Java Spring на экземпляре Amazon EC2.

Я делаю POST-запрос из своего приложения React. Запросы от Chrome и Firefox возвращают 403, а запрос от Safari возвращает 200 и ожидаемые данные.

После некоторого исследования я обнаружил, что я должен добавить код этогде-то, чтобы включить CORS. Я не знаком с Tomcat и не знаю, куда именно поместить этот фрагмент кода.

У меня есть следующие файлы web.xml, перечисленные при выполнении команды find:

./webapps/host-manager/WEB-INF/web.xml
./webapps/ROOT/WEB-INF/web.xml
./webapps/docs/appdev/sample/web/WEB-INF/web.xml
./webapps/docs/WEB-INF/web.xml
./webapps/examples/WEB-INF/web.xml
./webapps/manager/WEB-INF/web.xml
./conf/web.xml

Я попытался добавить код в host-manager/WEB-INF/web.xml и host-manager/WEB-INF/web.xml одновременно и попытался запустить его, но все равно получил ответ 403.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
151
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте добавить следующий код в свое приложение Spring. Он обрабатывает конфигурацию CORS для всего приложения.

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .cors()
            .and()
            .headers().disable()
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

} 

Кушагра, я фронтенд-разработчик и мне нужно точно знать, куда это добавить.

HarshvardhanSharma 09.01.2019 19:30

Вы можете добавить этот класс в любом месте вашего исходного каталога. Например, src/main/java/application/security. Также не забудьте добавить библиотеку org.springframework.boot:spring-boot-starter-security в ваш build.gradle или соответствующую библиотеку в pom.xml, если вы используете maven.

Kushagra Goyal 09.01.2019 19:47

Несмотря на то, что этот ответ сообщает вам, как справиться с этим с помощью Spring, он не отвечает на ваш исходный вопрос.

В вашем случае вам нужно добавить CORS фильтр к ./conf/web.xml. Из документации Tomcat:

Tomcat provides a number of Filters which may be configured for use with all web applications using $CATALINA_BASE/conf/web.xml or may be configured for individual web applications by configuring them in the application's WEB-INF/web.xml.

Другие вопросы по теме