springboot使用zuul解決微服務的跨域問題
阿新 • • 發佈:2018-12-11
zuul作為微服務最外層的閘道器,最適合用來解決需要所有服務都存在的問題,下面來說說怎麼使用zuul解決微服務的跨域問題
1.首先引入依賴
<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter --> <dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>cors-filter</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/java-property-utils --> <dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>java-property-utils</artifactId> <version>1.9.1</version> </dependency>
注意zuul要允許與進行跨域相關的頭資訊
zuul:
#需要忽略的頭部資訊,不在傳播到其他服務
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken
2.注入CorsFilter
package com.cfh.practice.zuulserver.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; /** * @Author: cfh * @Date: 2018/9/24 20:36 * @Description: 使用zuul解決請求跨域問題 */ @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 允許cookies跨域 config.addAllowedOrigin("*");// #允許向該伺服器提交請求的URI,*表示全部允許,在SpringMVC中,如果設成*,會自動轉成當前請求頭中的Origin config.addAllowedHeader("*");// #允許訪問的頭資訊,*表示全部 config.setMaxAge(18000L);// 預檢請求的快取時間(秒),即在這個時間段裡,對於相同的跨域請求不會再預檢了 config.addAllowedMethod("*");// 允許提交請求的方法,*表示全部允許 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
這樣我們就完成了跨域,但需要注意如果在最外層的服務閘道器配置了跨域,那服務自身就不能再進行跨域處理否則會引發衝突