spring gateway如何解決跨域問題
報錯截圖

報錯意思是請求頭中沒有Access-Control-Allow-Origin
報錯分析
但我在網(wǎng)關(guān)的配置文件中早就加了跨域的配置了

嘗試解決
于是我上網(wǎng)開始查
但是網(wǎng)上的代碼要么方法過時報錯,要么就向配置文件原因沒有起作用,好在我堅持不懈的查詢下,把所有有用的信息拼湊成了一個有用的配置方法
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsWebFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*"); // 允許任何方法(post、get等)
config.addAllowedOrigin("*"); // 允許任何域名使用
config.addAllowedHeader("*"); // 允許任何頭
config.setAllowCredentials(true); //允許接受cookie
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
只要在網(wǎng)關(guān)微服務(wù)下創(chuàng)建一個配置類把這段代碼加進(jìn)去即可
于是
重新啟動

好家伙
再次報錯,不過這次不是沒有該屬性,而是兩個??!
那既然這樣
我就試試只用代碼配置,而注釋配置文件配置(因為開始就是配置文件配置無效)
重啟走起

依然報重復(fù)錯誤。。。。
最終
最后通過調(diào)試發(fā)現(xiàn)
請求發(fā)往網(wǎng)關(guān)后,再次發(fā)往其他微服務(wù),而該微服務(wù)的controller類上配置了跨域注解

這就導(dǎo)致了兩次Access-Control-Allow-Origin被設(shè)置了
所有只要把@CrossOrigin注解去了即可
再次重啟

總結(jié)
除了為啥在配置文件里配置沒有生效沒搞懂外,其他都能理解
同時這里也解釋了一個問題,為啥要專門寫一個接口api模塊來專門實(shí)現(xiàn)微服務(wù)間的調(diào)用
從這里調(diào)用用戶微服務(wù)來看,網(wǎng)關(guān)配置了跨域,那么其他的微服務(wù)就不能配置跨域了
那這樣微服務(wù)如果直接調(diào)用就成了跨域了,而api接口模塊就很好的解決了這個問題,同時也限制了服務(wù)與服務(wù)見可調(diào)用接口的數(shù)量,按需來調(diào)用,看來當(dāng)初聽老師話多創(chuàng)建一個api接口模塊是有原因的啊
解決睡覺!
補(bǔ)充?。?!
后來發(fā)現(xiàn)
刪除其他微服務(wù)的跨域配置在vue連接里可行
但是如果在html頁面直接發(fā)送axios請求后臺數(shù)據(jù)
請求網(wǎng)關(guān)可行,但是請求完了網(wǎng)關(guān),網(wǎng)關(guān)會進(jìn)行一次頁面轉(zhuǎn)發(fā)
這就使得第二次請求沒有Access-Control-Allow-Origin報跨域請求
如果將后臺服務(wù)的跨域配置重新寫上
又會出現(xiàn)Access-Control-Allow-Origin重復(fù)的問題。。。
好在查到了大佬的帖子,可以在配置文件找那個添加一段過濾配置
解決重復(fù)跨域問題,進(jìn)行header去重
spring:
cloud:
gateway:
default-filters:
- DedupeResponseHeader=Vary Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_UNIQUE
- DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_FIRST
至于帖子中寫的解決cookie跨域問題,,,我試了,似乎沒有效果,一樣報跨域錯誤,于是我在配置類嘗試著找相關(guān)方法,還真有!
只需要在配置類里添加以一段設(shè)置cookie允許跨域的配置(已經(jīng)在上面的配置方法里補(bǔ)充了cookie跨域代碼)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Maven本地倉庫明明有對應(yīng)的jar包但還是報找不到的問題
這篇文章主要介紹了解決Maven本地倉庫明明有對應(yīng)的jar包但還是報找不到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
解析Java編程中設(shè)計模式的開閉原則的運(yùn)用
這篇文章主要介紹了解析Java編程中設(shè)計模式的開閉原則的運(yùn)用,開閉原則多應(yīng)用于Java程序的擴(kuò)展開發(fā)方面,需要的朋友可以參考下2016-02-02

