最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring cloud gateway 如何修改請求路徑Path

 更新時間:2021年06月25日 11:36:55   作者:一葉旅途  
這篇文章主要介紹了spring cloud gateway 修改請求路徑Path的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、背景

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

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

@Component
public 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字段進行過濾

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

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

spring cloud gateway 設置context-path服務路由404排查

一、背景

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

二、服務信息

微服務網(wǎng)關:spring-cloud-gateway

微服務:order-service、user-service

三、問題描述

因為網(wǎng)關服務集成了knife4j,因此可以通過訪問http://網(wǎng)關ip:port/doc.html,即可訪問所有在同一個注冊中心的服務的knife4j信息,但是實際訪問時用戶服務相關接口報404錯誤。

四、問題排查

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

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

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

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

RewritePathGatewayFilterFactory中的apply方法會匹配服務啟動時加載的regexp正則,從而對服務path進行改寫。

源碼如下:

五、解決方案

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

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

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

在啟動類添加注解:

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

4)推薦使用

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

安陆市| 肥城市| 合阳县| 湘潭市| 怀来县| 莒南县| 曲水县| 湾仔区| 盱眙县| 扶绥县| 荔波县| 托里县| 武山县| 隆化县| 江孜县| 定西市| 略阳县| 云浮市| 兴国县| 百色市| 吉水县| 如东县| 紫阳县| 余干县| 铁岭县| 绿春县| 南溪县| 大余县| 玉门市| 崇阳县| 通道| 布拖县| 泉州市| 乌拉特后旗| 英德市| 崇仁县| 家居| 枝江市| 马公市| 祁东县| 交城县|