SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題
跨域
在SpringCloud中 zuul 和springboot 要同時配置才能實(shí)現(xiàn)網(wǎng)關(guān)處理跨域
解決Access to XMLHttpRequest at ‘http://192.168.2.173:8001/energy-base/groupType/getPageByType?timestamp=1557886425725' from origin ‘http://localhost:3000' has been blocked by CORS policy: The ‘Access-Control-Allow-Origin' header contains multiple values ‘http://localhost:3000, *', but only one is allowed.
Access-Control-Allow-Origin只能有一個值解決方案
SpringBoot代碼
@Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 允許cookies跨域 config.addAllowedOrigin("*");// #允許向該服務(wù)器提交請求的URI,*表示全部允許,在SpringMVC中,如果設(shè)成*,會自動轉(zhuǎn)成當(dāng)前請求頭中的Origin config.addAllowedHeader("*");// #允許訪問的頭信息,*表示全部 config.setMaxAge(7200L);// 預(yù)檢請求的緩存時間(秒),即在這個時間段里,對于相同的跨域請求不會再預(yù)檢了 config.addAllowedMethod("*");// 允許提交請求的方法,*表示全部允許 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
zuul yml配置
zuul: #需要忽略的頭部信息,不在傳播到其他服務(wù) sensitive-headers: Access-Control-Allow-Origin ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken max: host: connections: 5000 #最大請求時間 host: #等待 socket-timeout-millis: 60000 connect-timeout-millis: 60000
用SpringCloud zuul中遇到的坑
最近筆者在研究和使用SpringCloud Zuul作為微服務(wù)的網(wǎng)關(guān)。在這個微服務(wù)網(wǎng)關(guān),我們集成了權(quán)限管理和路由轉(zhuǎn)發(fā)到后端,后端的微服務(wù)有用SpringBoot開發(fā)的,也有用Python Django 開發(fā)的。
但是有的服務(wù)的調(diào)用會出返回下面的消息
{"timestamp":"2020-09-07 11:45:38","status":500,
"error":"Internal Server Error","exception":"com.netflix.zuul.exception.ZuulException",
"message":"GENERAL"
}
上面的錯誤信息不是每次都必現(xiàn)的,而且不是每個后端API都會出現(xiàn)的;
對于那些返回時間比較長的服務(wù)才出現(xiàn)的。
第一反應(yīng)是修改熔斷器的連接時間和讀取超時時間。
ribbon.ConnectTimeout=60000 ribbon.ReadTimeout=60000
而且筆者的所有的配置都是對的,但是結(jié)果還是不生效。接著筆者又把SpringCloud Zuul的版本升級到最新版本,還是沒有把問題解決。
后面才發(fā)現(xiàn)是沒有把spring-retry的依賴加入pom.xml 里面來,所以配置的retry的參數(shù)都不生效,而且日志也不提示缺少了spring-retry的依賴,個人覺得這塊zuul代碼需要完善一下,只要填寫retry的參數(shù),就要判斷是否有spring-retry的依賴。
加上spring-retry的依賴后,問題解決!
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringCloud之Zuul網(wǎng)關(guān)原理及其配置講解
- SpringCloud網(wǎng)關(guān)(Zuul)如何給多個微服務(wù)之間傳遞共享參數(shù)
- SpringCloud Zuul實(shí)現(xiàn)負(fù)載均衡和熔斷機(jī)制方式
- SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)
- SpringCloud Zuul的使用簡介
- 解決springcloud Zuul丟失Cookie的問題
- SpringCloud Zuul基本使用方法匯總
- SpringCloud Zuul服務(wù)功能與使用方法解析
- SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)
相關(guān)文章
使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01spring boot security設(shè)置忽略地址不生效的解決
這篇文章主要介紹了spring boot security設(shè)置忽略地址不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07