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); }}
添加回答
舉報