3 回答
TA贡献1843条经验 获得超7个赞
实际上,在Spring Data REST 2.6(Ingalls)之前,只有HandlerMappingSpring MVC创建的实例WebMvcConfigurationSupport和带注释的控制器才能@CrossOrigin识别CORS。
但是现在已经修复了DATAREST-573,RepositoryRestConfiguration现在公开了一个getCorsRegistry()全局设置,并且@CrossOrigin还可以识别存储库上的注释,因此这是推荐的方法。
对于必须坚持使用Spring Data REST 2.5(Hopper)或以前版本的人,我认为最好的解决方案是使用基于过滤器的方法。显然你可以使用Tomcat,Jetty或者这个,但要注意Spring Framework 4.2还提供了一个CorsFilter使用相同@CrossOrigin和addCorsMappings(CorsRegistry registry)接近的CORS处理逻辑的方法。通过将UrlBasedCorsConfigurationSource实例传递给CorsFilter构造函数参数,您可以轻松获得与Spring本机CORS全局支持一样强大的功能。
如果您使用的是Spring Boot(支持Filterbean),它可能是这样的:
@Configurationpublic class RestConfiguration {
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues();
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}}TA贡献1871条经验 获得超8个赞
自从Ingalls列车实现以来,现在开始在Spring Data中支持CORS。有两种方法可以解决:
@CrossOrigin带有指定origins,methods和allowedHeaders通过@RepositoryRestResource接口的注释。@CrossOrigin(...)@RepositoryRestResourcepublic interface PageRepository extends CrudRepository<Page, Long> { ... }具有
RepositoryRestConfiguration内部@Configuration类的全局配置。@CrossOrigin因此不需要标记存储库。@Configurationpublic class GlobalRepositoryRestConfigurer extends RepositoryRestConfigurerAdapter { @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.getCorsRegistry() .addMapping(CORS_BASE_PATTERN) .allowedOrigins(ALLOWED_ORIGINS) .allowedHeaders(ALLOWED_HEADERS) .allowedMethods(ALLOWED_METHODS); }}
添加回答
举报
