通过CorsRegistry或CorsFilter全局允许CORS

时间:2018-02-07 10:28:21

标签: spring spring-boot cors spring-security-rest

我有一个Springboot后端,通过它我暴露了一些端点。

我需要从我的前端访问它。当我这样做时,我收到错误Invalid CORS request。很公平。
我在我的后端全局启用了Cross origin请求,如doc中所述。

下面的代码段
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addCorsMappings(final CorsRegistry registry) {
    registry.addMapping("*").allowedOrigins("My-frontend-Host-url");
  }
}

但由于某种原因,这不起作用。我犯了同样的错误。但我设法使用CorsFilter如下工作

@Bean
  public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("My-frontend-Host-url");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(0);
    return bean;
  }

那么这两种方法之间的区别究竟是什么呢?为什么它不适用于第一种情况。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

未选中,但根据doc,您可以将路径模式从registry.addMapping("*")更改为registry.addMapping("/**")

  

如果未指定路径模式,则跨源请求处理将映射到“/**”。