SpringCloud zuul 網(wǎng)關如何解決跨域問題
跨域
在SpringCloud中 zuul 和springboot 要同時配置才能實現(xiàn)網(wǎng)關處理跨域
解決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("*");// #允許向該服務器提交請求的URI,*表示全部允許,在SpringMVC中,如果設成*,會自動轉成當前請求頭中的Origin
config.addAllowedHeader("*");// #允許訪問的頭信息,*表示全部
config.setMaxAge(7200L);// 預檢請求的緩存時間(秒),即在這個時間段里,對于相同的跨域請求不會再預檢了
config.addAllowedMethod("*");// 允許提交請求的方法,*表示全部允許
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
zuul yml配置
zuul:
#需要忽略的頭部信息,不在傳播到其他服務
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ǎng)關。在這個微服務網(wǎng)關,我們集成了權限管理和路由轉發(fā)到后端,后端的微服務有用SpringBoot開發(fā)的,也有用Python Django 開發(fā)的。
但是有的服務的調用會出返回下面的消息
{"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)的;
對于那些返回時間比較長的服務才出現(xiàn)的。
第一反應是修改熔斷器的連接時間和讀取超時時間。
ribbon.ConnectTimeout=60000 ribbon.ReadTimeout=60000
而且筆者的所有的配置都是對的,但是結果還是不生效。接著筆者又把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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
spring Boot與Mybatis整合優(yōu)化詳解
關于spring-boot與mybatis整合優(yōu)化方面的介紹,就是Mybatis-Spring-boot-starter的介紹,具體內容詳情大家參考下本文2017-07-07
Java實現(xiàn)查找Excel數(shù)據(jù)并高亮顯示
在日常的開發(fā)工作中,我們經(jīng)常需要處理各種格式的數(shù)據(jù),本文將為您詳細介紹如何利用強大的第三方庫 Spire.XLS for Java,輕松實現(xiàn) Excel 數(shù)據(jù)的查找與高亮功能,有需要的小伙伴可以了解下2025-09-09
Java 方法重載Overload常見誤區(qū)及注意事項
Java方法重載允許同一類中同名方法通過參數(shù)類型、數(shù)量、順序差異實現(xiàn)功能擴展,提升代碼靈活性,核心條件為參數(shù)列表不同,不涉及返回類型、訪問修飾符等,本文給大家介紹Java 方法重載Overload常見誤區(qū)及注意事項,感興趣的朋友一起看看吧2025-07-07
java 用redisTemplate 的 Operations存取list集合操作
這篇文章主要介紹了java 用redisTemplate 的 Operations存取list集合操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java中的HttpServletRequest接口詳細解讀
這篇文章主要介紹了Java中的HttpServletRequest接口詳細解讀,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下

