У меня есть серверная часть, работающая на 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.




Попробуйте добавить следующий код в свое приложение 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);
}
}
Вы можете добавить этот класс в любом месте вашего исходного каталога. Например, src/main/java/application/security. Также не забудьте добавить библиотеку org.springframework.boot:spring-boot-starter-security в ваш build.gradle или соответствующую библиотеку в pom.xml, если вы используете maven.
Несмотря на то, что этот ответ сообщает вам, как справиться с этим с помощью 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.
Кушагра, я фронтенд-разработчик и мне нужно точно знать, куда это добавить.