Spring Boot Cors过滤器返回Access-Control-Allow-Origin:null

时间:2018-03-29 10:56:51

标签: spring spring-mvc spring-boot cors

我有一个小的Spring启动应用程序,并坚持使用此CORS问题

无法加载http://localhost:8093/trial/events/?_=1522319557789:' Access-Control-Allow-Origin'标头的值为' null'这不等于提供的原产地。起源' null'因此不允许访问。

遵循了Spring文档,这是我的配置:

@Configuration
@EnableWebMvc
public class WebConfig  extends WebMvcConfigurerAdapter{

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**");
}

}

我从服务器获得200响应,但使用Access-Control-Allow-Origin:null。

因此Chrome正在抱怨上述错误。

尝试在Controller中手动设置标题,但现在我可以看到2个标题具有相同的名称。 Chrome再次抱怨多个标题名称相同。

不确定Spring将Access-Control-Allow-Origin配置为Null的位置 感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

以endpoints.cors。*为前缀的Spring引导属性由Actuator使用,这就是为什么它不适用于MVC端点。

尝试以下代码段

    registry.addMapping("/trial/**")
        .allowedOrigins("http://localhost") // Add you arigins here ,to bypass all the origins you can put "*".
        .allowedMethods("PUT", "DELETE","POST","GET") // add allowed methods here
        .allowedHeaders("header1", "header2", "header3")// add allowed headers here
        .exposedHeaders("header1", "header2") // add exposed headers here
        .allowCredentials(false).maxAge(3600);

默认逻辑可以在类 org.springframework.web.cors.CorsConfiguration.java

中找到
/**
 * Set the origins to allow, e.g. {@code "http://domain1.com"}.
 * <p>The special value {@code "*"} allows all domains.
 * <p>By default this is not set.
 */
public void setAllowedOrigins(@Nullable List<String> allowedOrigins) {
    this.allowedOrigins = (allowedOrigins != null ? new ArrayList<>(allowedOrigins) : null);
}

默认情况下,此设置未设置。您需要使用

显式设置它
.allowedOrigins()