SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題
跨域
在SpringCloud中 zuul 和springboot 要同時(shí)配置才能實(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只能有一個(gè)值解決方案
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è)成*,會自動(dòng)轉(zhuǎn)成當(dāng)前請求頭中的Origin
config.addAllowedHeader("*");// #允許訪問的頭信息,*表示全部
config.setMaxAge(7200L);// 預(yù)檢請求的緩存時(shí)間(秒),即在這個(gè)時(shí)間段里,對于相同的跨域請求不會再預(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 #最大請求時(shí)間
host: #等待
socket-timeout-millis: 60000
connect-timeout-millis: 60000
用SpringCloud zuul中遇到的坑
最近筆者在研究和使用SpringCloud Zuul作為微服務(wù)的網(wǎng)關(guān)。在這個(gè)微服務(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"
}
上面的錯(cuò)誤信息不是每次都必現(xiàn)的,而且不是每個(gè)后端API都會出現(xiàn)的;
對于那些返回時(shí)間比較長的服務(wù)才出現(xiàn)的。
第一反應(yīng)是修改熔斷器的連接時(shí)間和讀取超時(shí)時(shí)間。
ribbon.ConnectTimeout=60000 ribbon.ReadTimeout=60000
而且筆者的所有的配置都是對的,但是結(jié)果還是不生效。接著筆者又把SpringCloud Zuul的版本升級到最新版本,還是沒有把問題解決。
后面才發(fā)現(xiàn)是沒有把spring-retry的依賴加入pom.xml 里面來,所以配置的retry的參數(shù)都不生效,而且日志也不提示缺少了spring-retry的依賴,個(gè)人覺得這塊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>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot使用cache緩存過程代碼實(shí)例
這篇文章主要介紹了Springboot使用cache緩存過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
spring Boot與Mybatis整合優(yōu)化詳解
關(guān)于spring-boot與mybatis整合優(yōu)化方面的介紹,就是Mybatis-Spring-boot-starter的介紹,具體內(nèi)容詳情大家參考下本文2017-07-07
SpringBoot集成RbbitMQ隊(duì)列踩坑記錄
這篇文章主要介紹了SpringBoot集成RbbitMQ隊(duì)列踩坑記錄,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Java實(shí)現(xiàn)查找Excel數(shù)據(jù)并高亮顯示
在日常的開發(fā)工作中,我們經(jīng)常需要處理各種格式的數(shù)據(jù),本文將為您詳細(xì)介紹如何利用強(qiáng)大的第三方庫 Spire.XLS for Java,輕松實(shí)現(xiàn) Excel 數(shù)據(jù)的查找與高亮功能,有需要的小伙伴可以了解下2025-09-09
springboot手寫一個(gè)自己的starter源碼
在本篇文章里小編給大家整理了關(guān)于springboot手寫一個(gè)自己的starter源碼的全部知識點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-06-06
Java 方法重載Overload常見誤區(qū)及注意事項(xiàng)
Java方法重載允許同一類中同名方法通過參數(shù)類型、數(shù)量、順序差異實(shí)現(xiàn)功能擴(kuò)展,提升代碼靈活性,核心條件為參數(shù)列表不同,不涉及返回類型、訪問修飾符等,本文給大家介紹Java 方法重載Overload常見誤區(qū)及注意事項(xiàng),感興趣的朋友一起看看吧2025-07-07
java 用redisTemplate 的 Operations存取list集合操作
這篇文章主要介紹了java 用redisTemplate 的 Operations存取list集合操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java中的HttpServletRequest接口詳細(xì)解讀
這篇文章主要介紹了Java中的HttpServletRequest接口詳細(xì)解讀,是一個(gè)接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下

