Tomcat 启用 CORS:POST 来自 Safari returns 200、Chrome 和 Firefox return 403 的请求
Tomcat enable CORS: POST request from Safari returns 200, Chrome and Firefox return 403
我在 Tomcat 8.5 上有后端 运行ning,在 Amazon EC2 实例上有 Java Spring。
我从我的 React 应用发出 POST 请求。来自 Chrome 和 Firefox return 403 的请求,而来自 Safari returns 200 和预期数据的请求。
经过一番研究,我发现我必须在 某处 添加 this 代码才能启用 CORS。我对Tomcat不熟悉,不知道把这段代码放在哪里
我在 find
命令 运行 中列出了以下 web.xml
文件:
./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);
}
}
即使 告诉您如何用 Spring 处理它,它也没有回答您原来的问题。
您需要将 CORS Filter 添加到 ./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.
我在 Tomcat 8.5 上有后端 运行ning,在 Amazon EC2 实例上有 Java Spring。
我从我的 React 应用发出 POST 请求。来自 Chrome 和 Firefox return 403 的请求,而来自 Safari returns 200 和预期数据的请求。
经过一番研究,我发现我必须在 某处 添加 this 代码才能启用 CORS。我对Tomcat不熟悉,不知道把这段代码放在哪里
我在 find
命令 运行 中列出了以下 web.xml
文件:
./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);
}
}
即使
您需要将 CORS Filter 添加到 ./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.