3 回答
TA貢獻1843條經(jīng)驗 獲得超7個贊
實際上,在Spring Data REST 2.6(Ingalls)之前,只有HandlerMappingSpring MVC創(chuàng)建的實例WebMvcConfigurationSupport和帶注釋的控制器才能@CrossOrigin識別CORS。
但是現(xiàn)在已經(jīng)修復(fù)了DATAREST-573,RepositoryRestConfiguration現(xiàn)在公開了一個getCorsRegistry()全局設(shè)置,并且@CrossOrigin還可以識別存儲庫上的注釋,因此這是推薦的方法。
對于必須堅持使用Spring Data REST 2.5(Hopper)或以前版本的人,我認為最好的解決方案是使用基于過濾器的方法。顯然你可以使用Tomcat,Jetty或者這個,但要注意Spring Framework 4.2還提供了一個CorsFilter使用相同@CrossOrigin和addCorsMappings(CorsRegistry registry)接近的CORS處理邏輯的方法。通過將UrlBasedCorsConfigurationSource實例傳遞給CorsFilter構(gòu)造函數(shù)參數(shù),您可以輕松獲得與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條經(jīng)驗 獲得超8個贊
自從Ingalls列車實現(xiàn)以來,現(xiàn)在開始在Spring Data中支持CORS。有兩種方法可以解決:
@CrossOrigin帶有指定origins,methods和allowedHeaders通過@RepositoryRestResource接口的注釋。@CrossOrigin(...)@RepositoryRestResourcepublic interface PageRepository extends CrudRepository<Page, Long> { ... }具有
RepositoryRestConfiguration內(nèi)部@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); }}
添加回答
舉報
