亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Data Rest和Cors

Spring Data Rest和Cors

小唯快跑啊 2019-08-12 16:48:45
Spring Data Rest和Cors我正在開發一個帶有Rest接口和dart前端的Spring Boot應用程序。XMLHttpRequest確實執行一個完全正確處理的OPTIONS請求。在此之后,發出最終的GET(“/ products”)請求并失?。赫埱蟮馁Y源上不存在“Access-Control-Allow-Origin”標頭。因此不允許來源' http:// localhost:63343'訪問。經過一些調試后,我發現了以下內容:為RepositoryRestHandlerMapping之外的所有子類填充了AbstractHandlerMapping.corsConfiguration。在RepositoryRestHandlerMapping中,沒有corsConfiguration在創建時存在/設置,因此它不會被識別為cors路徑/資源。=>沒有連接CORS標頭這可能是問題嗎?我怎么設置它?配置類:@Configurationpublic class RestConfiguration extends RepositoryRestMvcConfiguration {     @Override     public void addCorsMappings(CorsRegistry registry) {         registry.addMapping("/**").allowCredentials(false).allowedOrigins("*").allowedMethods("PUT", "POST", "GET", "OPTIONS", "DELETE").exposedHeaders("Authorization", "Content-Type");     }    ...}我甚至嘗試設置每個注釋的Cors:@CrossOrigin( methods = RequestMethod.GET, allowCredentials = "false")public interface ProductRepository extends CrudRepository<Product, String> {}原始請求標頭:GET /products HTTP/1.1Host: localhost:8080Connection: keep-aliveCache-Control: max-age=0authorization: Basic dXNlcjpwYXNzd29yZA==User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.130 Chrome/43.0.2357.130 Safari/537.36Content-Type: application/jsonAccept: */* Referer: http://localhost:63343/inventory-web/web/index.html Accept-Encoding: gzip, deflate, sdch Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4原始響應標頭:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/hal+json;charset=UTF-8Transfer-Encoding: chunkedDate: Thu, 30 Jul 2015 15:58:03 GMT使用的版本:Spring Boot 1.3.0.M2 Spring 4.2.0.RC2我錯過了什么?
查看完整描述

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使用相同@CrossOriginaddCorsMappings(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;
    }}


查看完整回答
反對 回復 2019-08-12
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

自從Ingalls列車實現以來現在開始在Spring Data中支持CORS。有兩種方法可以解決:

  1. @CrossOrigin帶有指定origins,methodsallowedHeaders通過@RepositoryRestResource接口的注釋。

    @CrossOrigin(...)@RepositoryRestResourcepublic interface PageRepository extends CrudRepository<Page, Long> { ... }
  2. 具有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);
         }}


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 817 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號