在新Spring中设置CORS的方法是正确的?

时间:2017-10-03 14:28:53

标签: java spring cors

我没有在互联网上找到我的问题的答案。为非Web应用程序设置全局CORS的正确方法是什么(仅限json api)?

我找到了org.springframework.web.cors.CorsConfiguration但我无法找到它的使用位置。请帮我。我不知道该怎么做。

我的春季版:2.0.0.M4

1 个答案:

答案 0 :(得分:0)

看看here

基本上,一种方法是使用配置类:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
        .allowedOrigins("http://domain2.com")
        .allowedMethods("PUT", "DELETE")
            .allowedHeaders("header1", "header2", "header3")
        .exposedHeaders("header1", "header2")
        .allowCredentials(false).maxAge(3600);
    }
}

或者您可以使用基本过滤器。

@Configuration
public class MyConfiguration {

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

每个控制器还有一个@CorsOrigin注释:

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {...