3 回答
TA贡献1843条经验 获得超7个赞
实际上,在Spring Data REST 2.6(Ingalls)之前,只有HandlerMapping
Spring 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(支持Filter
bean),它可能是这样的:
@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); }}
添加回答
举报