2016-03-02 58 views
1

你好所有春季開機/雲/ Netflix Zuul專家!Netflix Zuul CORS

我正在使用Netflix OSS組件和使用eureka和Zuul進行服務發現和路由的Spring Boot運行微服務環境。多個微服務通過docker部署在多個VPS上。我正在運行一個Angular JS客戶端,它使用Zuul路由通過單個端點訪問這些微服務。

我使用yeoman hottowel作爲角支架進行快速開發,但是由於web服務器在localhost:3000上運行並試圖通過Zuul路由器調用RESTful端點,因此我遇到了CORS問題在別處跑。

我已經玩過Zuul過濾器(pre,route和post),嘗試在響應中添加適當的訪問控制頭文件,而且我可以看到這適用於從Rest客戶端提交POST請求(我正在使用Paws),但是當通過在瀏覽器中運行的角度JavaScript提交請求時,CORS預檢選項請求不會被過濾器處理,實際上Zuul會返回403錯誤,而瀏覽器當然會報告CORS錯誤。

也許在生產中,我可以從Zuul端點提供JavaScript服務,而不會遇到這個問題,但是我想知道是否有配置Zuul中所有CORS處理的方法?

+0

你得到的錯誤是什麼?我從AngularJS中得到了一個問題,同時CORS頭文件翻了一番,我認爲這是因爲我的API網關(Zuul代理)和我的資源服務器(服務)中有一個CORS過濾器。 –

+0

我沒有收到Zuul返回的任何CORS頭文件。暫時我已經禁用Zuul,直到我弄明白爲止。我懷疑我會盡量不要太聰明,讓資源服務器處理CORS處理和Zuul代理一切。我會在更新時更新這篇文章。原則上,我仍然認爲讓Zuul處理CORS和認證是一個好主意。 –

回答

1

我有自定義cors過濾器相同的問題。我通過添加zuul項目中的代碼解決了這個問題,如下所示:

@Bean 
public FilterRegistrationBean corsFilter() { 
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
    CorsConfiguration config = new CorsConfiguration(); 
    config.setAllowCredentials(true); 
    config.addAllowedOrigin("*"); 
    config.addAllowedHeader("*"); 
    config.addAllowedMethod("*"); 
    source.registerCorsConfiguration("/**", config); 
    FilterRegistrationBean bean = new FilterRegistrationBean(new org.springframework.web.filter.CorsFilter(source)); 
    bean.setOrder(0); 
    return bean; 
} 

我希望這會對您有所幫助!