Tomcat启用CORS:Safari的POST请求从chrome和firefox 403返回200

时间:2019-01-09 18:22:55

标签: java google-chrome tomcat cors catalina

我的后端在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。

2 个答案:

答案 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。