亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

spring cloud gateway 如何修改請(qǐng)求路徑Path

瀏覽:24日期:2023-07-06 14:42:40
一、背景

項(xiàng)目升級(jí)改造,老項(xiàng)目使用請(qǐng)求url中特定參數(shù)進(jìn)行服務(wù)路由,現(xiàn)使用gateway網(wǎng)關(guān)進(jìn)行路由服務(wù)信息

二、根據(jù)參數(shù)信息修改請(qǐng)求路徑Path

@Componentpublic class RequestFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest str = exchange.getRequest();if (str.getQueryParams().containsKey('demo')){ addOriginalRequestUrl(exchange, str.getURI()); String newPath =str.getPath()+'demo'; ServerHttpRequest newRequest = str.mutate() .path(newPath) .build(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI()); return chain.filter(exchange.mutate() .request(newRequest).build());}return chain.filter(exchange); } @Override public int getOrder() {return 1; }

1、根據(jù)url路徑是否包含特定參數(shù)demo字段進(jìn)行過濾

2、注意這個(gè)只是修改path路徑值,并不能修改gateway路由得serverid

3、getOrder方法 執(zhí)行順先順序0-100

spring cloud gateway 設(shè)置context-path服務(wù)路由404排查一、背景

最近做網(wǎng)關(guān)重構(gòu),技術(shù)選型為spring cloud gateway,采用consul作為配置中心和注冊(cè)中心,秉承不重啟原則,網(wǎng)關(guān)內(nèi)部實(shí)現(xiàn)動(dòng)態(tài)路由機(jī)制,采用定時(shí)任務(wù)定時(shí)更新網(wǎng)關(guān)路由信息。

二、服務(wù)信息

微服務(wù)網(wǎng)關(guān):spring-cloud-gateway

微服務(wù):order-service、user-service

三、問題描述

因?yàn)榫W(wǎng)關(guān)服務(wù)集成了knife4j,因此可以通過訪問http://網(wǎng)關(guān)ip:port/doc.html,即可訪問所有在同一個(gè)注冊(cè)中心的服務(wù)的knife4j信息,但是實(shí)際訪問時(shí)用戶服務(wù)相關(guān)接口報(bào)404錯(cuò)誤。

四、問題排查

1、排查發(fā)現(xiàn)order-service未設(shè)置server.servlet.context-path,user-service有設(shè)置;

2、驗(yàn)證context-path的影響發(fā)現(xiàn)在路由設(shè)置時(shí)path字段值必須加前綴再截取才可以正常路由;

3、由于公司網(wǎng)關(guān)是既有產(chǎn)品,當(dāng)前是技術(shù)框架重構(gòu),因此不能改動(dòng)原來接口訪問路徑,因此不可以在原有路徑前面再加前綴;

排查源碼發(fā)現(xiàn)請(qǐng)求會(huì)經(jīng)過FilteringWebHandler的filter方法,此方法在路由過程中會(huì)走12個(gè)過濾器,其中第5個(gè)過濾器

RewritePathGatewayFilterFactory中的apply方法會(huì)匹配服務(wù)啟動(dòng)時(shí)加載的regexp正則,從而對(duì)服務(wù)path進(jìn)行改寫。

源碼如下:

spring cloud gateway 如何修改請(qǐng)求路徑Path

五、解決方案

1)若配置路由URI為lb,則注冊(cè)中心服務(wù)名稱不能和server.servlet.context-path名稱一致,否則contextPath會(huì)被改寫為空字符串;

2)若注冊(cè)中心和server.servlet.context-path必須一致,則斷言中設(shè)置Path時(shí)需在contextPath前包裝一層前綴,且Filter中需截取第一個(gè)字符串;

3)禁止gateway網(wǎng)關(guān)主動(dòng)從consul拉取路由信息并設(shè)置默認(rèn)過濾器,該操作會(huì)設(shè)置默認(rèn)過濾規(guī)則,reWritePath匹配正則修改請(qǐng)求路徑

在啟動(dòng)類添加注解:

@SpringBootApplication( exclude = org.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration.class)

4)推薦使用

重寫過濾鏈(只需添加如下配置):

spring.cloud.gateway.discovery.locator.filters[0]=PreserveHostHeader

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 999www人成免费视频 | 久久只有这才是精品99 | 青青草国产三级精品三级 | 国产91在线精品 | 开心网五月色婷婷综合图片 | 日韩一区国产二区欧美三 | 欧美三级在线播放 | 一本一本大道香蕉久在线精品 | 性xxxxxxx18老师 | 国产成人综合网 | 久久综合网址 | 黄网站色视频免费看无下截 | 日韩福利在线视频 | 亚洲首页在线观看 | 免费观看一级毛片 | 麻豆传媒入口直接进入免费 | 极品销魂一区二区三区 | 天天狠狠色噜噜 | 麻豆成人在线视频 | 黄网站免费在线观看 | 日韩中文字幕视频在线 | 国产精品久久国产三级国电话系列 | 黄色在线视频播放 | 亚洲精品一区二区综合 | 国产三级精品在线观看 | 91青青青青青爽在线 | 青青草一区二区免费精品 | 中文字幕一级片 | 天天拍拍天天爽免费视频 | 国产一级免费片 | 国产一区二区三区不卡观 | 精品视频专区 | 欧美成人一级视频 | 免费在线观看黄色毛片 | 国产精品主播视频 | 欧美精品久久久久久久免费观看 | 欧美特黄特色aaa大片免费看 | 亚洲午夜视频 | 国产精品柏欣彤在线观看 | 国产麻豆高清视频在线第一页 | 国产在线观看91精品2021 |