我的后端在Tomcat 8.5和Amazon EC2实例上的Java Spring上运行。
我从我的React应用发出了发布请求。 Chrome和Firefox的请求返回403,而野生动物园的请求则返回200和期望的数据。
经过研究,我发现必须添加this代码 somewhere 才能启用CORS。我不熟悉Tomcat,也不知道将这段代码放在哪里。
我有以下 web.xml 文件,这些文件由shell 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。
答案 0 :(得分:1)
尝试将以下代码添加到您的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);
}
}
答案 1 :(得分:0)
即使 this answer 告诉您如何使用 Spring 处理它,它也没有回答您最初的问题。
在您的情况下,您需要将 CORS Filter 添加到 ./conf/web.xml
。来自 Tomcat 文档:
Tomcat 提供了许多可以配置使用的过滤器 使用 $CATALINA_BASE/conf/web.xml 的所有 Web 应用程序,或者可能是 通过在 应用程序的 WEB-INF/web.xml。