SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問(wè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ù)器提交請(qǐng)求的URI,*表示全部允許,在SpringMVC中,如果設(shè)成*,會(huì)自動(dòng)轉(zhuǎn)成當(dāng)前請(qǐng)求頭中的Origin
config.addAllowedHeader("*");// #允許訪問(wèn)的頭信息,*表示全部
config.setMaxAge(7200L);// 預(yù)檢請(qǐng)求的緩存時(shí)間(秒),即在這個(gè)時(shí)間段里,對(duì)于相同的跨域請(qǐng)求不會(huì)再預(yù)檢了
config.addAllowedMethod("*");// 允許提交請(qǐng)求的方法,*表示全部允許
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 #最大請(qǐng)求時(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開(kāi)發(fā)的,也有用Python Django 開(kāi)發(fā)的。
但是有的服務(wù)的調(diào)用會(huì)出返回下面的消息
{"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都會(huì)出現(xiàn)的;
對(duì)于那些返回時(shí)間比較長(zhǎng)的服務(wù)才出現(xiàn)的。
第一反應(yīng)是修改熔斷器的連接時(shí)間和讀取超時(shí)時(shí)間。
ribbon.ConnectTimeout=60000 ribbon.ReadTimeout=60000
而且筆者的所有的配置都是對(duì)的,但是結(jié)果還是不生效。接著筆者又把SpringCloud Zuul的版本升級(jí)到最新版本,還是沒(méi)有把問(wèn)題解決。
后面才發(fā)現(xiàn)是沒(méi)有把spring-retry的依賴加入pom.xml 里面來(lái),所以配置的retry的參數(shù)都不生效,而且日志也不提示缺少了spring-retry的依賴,個(gè)人覺(jué)得這塊zuul代碼需要完善一下,只要填寫(xiě)retry的參數(shù),就要判斷是否有spring-retry的依賴。
加上spring-retry的依賴后,問(wèn)題解決!
<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è)參考,也希望大家多多支持腳本之家。
- SpringCloud之Zuul網(wǎng)關(guān)原理及其配置講解
- SpringCloud網(wǎng)關(guān)(Zuul)如何給多個(gè)微服務(wù)之間傳遞共享參數(shù)
- SpringCloud Zuul實(shí)現(xiàn)負(fù)載均衡和熔斷機(jī)制方式
- SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)
- SpringCloud Zuul的使用簡(jiǎn)介
- 解決springcloud Zuul丟失Cookie的問(wèn)題
- SpringCloud Zuul基本使用方法匯總
- SpringCloud Zuul服務(wù)功能與使用方法解析
- SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Zuul基礎(chǔ)
相關(guān)文章
關(guān)于Java中的可見(jiàn)性和有序性問(wèn)題
這篇文章主要介紹了關(guān)于Java中的可見(jiàn)性和有序性問(wèn)題,Java在誕生之初就支持多線程,自然也有針對(duì)這三者的技術(shù)方案,今天就學(xué)習(xí)一下Java如何解決其中的可見(jiàn)性和有序性導(dǎo)致的問(wèn)題,需要的朋友可以參考下2023-08-08
使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
spring boot security設(shè)置忽略地址不生效的解決
這篇文章主要介紹了spring boot security設(shè)置忽略地址不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

