Gateway網(wǎng)關源碼解析
工作原理
客戶端向 Spring Cloud Gateway 發(fā)出請求。 如果網(wǎng)關處理程序映射確定請求與路由匹配,則將其發(fā)送到網(wǎng)關 Web 處理程序。 此處理程序通過特定于請求的過濾器鏈運行請求。 過濾器用虛線劃分的原因是過濾器可以在發(fā)送代理請求之前和之后運行邏輯。 執(zhí)行所有“預”過濾器邏輯。 然后發(fā)出代理請求。 發(fā)出代理請求后,將運行“發(fā)布”過濾器邏輯。
配置類分析
jar包中加載的配置類,會注入到IOC容器中。
1、GatewayClassPathWarningAutoConfiguration 檢查是否有正確的配置webflux
檢查是否有 org.springframework.web.servlet.DispatcherServlet
類,也就是是否引入了springweb的依賴。
2、GatewayAutoConfiguration 核心配置類
配置了很多bean,加載了gateway 需要注入的類。
配置了很多謂詞想的的bean
3、GatewayLoadBalancerClientAutoConfiguration 網(wǎng)關需要使用的負載均衡
該過濾器實現(xiàn)了負載均衡的功能,通過責任鏈的設計模式。
4、GatewayRedisAutoConfiguration 網(wǎng)關整合Redis整合Lua實現(xiàn)限流
5、GatewayDiscoveryClientAutoConfiguration 把網(wǎng)關服務注冊到注冊中心中去,服務注冊與發(fā)現(xiàn)功能
路由模式源碼分析
網(wǎng)關的請求入口在 DispatcherHandler類里面的 handler 方法。
查找handler方法中,子類會查找路由策略,循環(huán)查找路由策略,第一個匹配的策略會返回了。
執(zhí)行的handler
webHandler去執(zhí)行
執(zhí)行的是 filter 的 handler,gateway 默認有7個filter,分別實現(xiàn)了不同的功能:負載均衡、請求轉(zhuǎn)發(fā)等功能。各個filter通過責任鏈模式循環(huán)執(zhí)行。
解決前后端的跨域問題
微服務中跨域的問題,不屬于前端解決 jsonp ,只能支持get請求。
核心點就是在我們后端。
解決跨域的問題
- HttpClient轉(zhuǎn)發(fā)
- 使用過濾器允許接口可以跨域 響應頭設置
- Jsonp 不支持我們的post 屬于前端解決
- Nginx解決跨域的問題保持我們域名和端口一致性
- Nginx也是通過配置文件解決跨域的問題
- 基于微服務網(wǎng)關解決跨域問題,需要保持域名和端口一致性
- 使用網(wǎng)關代碼允許所有的服務可以跨域的問題
- 使用SpringBoot注解形式@CrossOrigin
gateway解決跨域問題:增加過濾器,給請求頭增加參數(shù)。
@Component public class CrossOriginFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); HttpHeaders headers = response.getHeaders(); headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*"); headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST, GET, PUT, OPTIONS, DELETE, PATCH"); headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*"); headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*"); return chain.filter(exchange); } }
以上就是Gateway網(wǎng)關源碼解析的詳細內(nèi)容,更多關于Gateway網(wǎng)關的資料請關注腳本之家其它相關文章!
相關文章
Springboot整合JwtHelper實現(xiàn)非對稱加密
本文主要介紹了Springboot整合JwtHelper實現(xiàn)非對稱加密,主要介紹兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03Java實現(xiàn)雪花算法的原理和實戰(zhàn)教程
這篇文章主要介紹了Java實現(xiàn)雪花算法的原理和實戰(zhàn)教程,本文通過語言表述和代碼的實現(xiàn)講解了該項算法,,需要的朋友可以參考下2021-06-06Java獲取XML節(jié)點總結之讀取XML文檔節(jié)點的方法
下面小編就為大家?guī)硪黄狫ava獲取XML節(jié)點總結之讀取XML文檔節(jié)點的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10