欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、背景

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

二、根據(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字段進(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作為配置中心和注冊中心,秉承不重啟原則,網(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è)注冊中心的服務(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)請求會(huì)經(jīng)過FilteringWebHandler的filter方法,此方法在路由過程中會(huì)走12個(gè)過濾器,其中第5個(gè)過濾器

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

源碼如下:

五、解決方案

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

2)若注冊中心和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匹配正則修改請求路徑

在啟動(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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA實(shí)現(xiàn)301永久重定向方法

    JAVA實(shí)現(xiàn)301永久重定向方法

    本篇文章給大家總結(jié)了JAVA中實(shí)現(xiàn)永久重定向的方法以及詳細(xì)代碼,對此有需要的朋友可以參考學(xué)習(xí)下。
    2018-04-04
  • Security中的WebSecurityConfigurerAdapter詳解

    Security中的WebSecurityConfigurerAdapter詳解

    這篇文章主要介紹了Security中的WebSecurityConfigurerAdapter詳解,今天我們要進(jìn)一步的的學(xué)習(xí)如何自定義配置Spring?Security,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java開發(fā)學(xué)習(xí)之Bean的作用域和生命周期詳解

    Java開發(fā)學(xué)習(xí)之Bean的作用域和生命周期詳解

    這篇文章主要介紹了淺談Spring中Bean的作用域,生命周期和注解,從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個(gè)過程就是一個(gè)生命周期。本文將通過示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • SpringBoot使用@PathVariable進(jìn)行數(shù)據(jù)校驗(yàn)的流程步驟

    SpringBoot使用@PathVariable進(jìn)行數(shù)據(jù)校驗(yàn)的流程步驟

    在SpringBoot項(xiàng)目中,我們經(jīng)常需要從 URL 中獲取參數(shù)并進(jìn)行相關(guān)的數(shù)據(jù)校驗(yàn),而@PathVariable注解就是一種非常方便的方式,可以讓我們在方法參數(shù)中直接獲取URL中的參數(shù),并進(jìn)行數(shù)據(jù)校驗(yàn),本文將介紹如何使用@PathVariable注解進(jìn)行數(shù)據(jù)校驗(yàn)
    2023-06-06
  • Java?BOI與NIO超詳細(xì)實(shí)例精講

    Java?BOI與NIO超詳細(xì)實(shí)例精講

    在Java的軟件設(shè)計(jì)開發(fā)中,通信架構(gòu)是不可避免的,我們在進(jìn)行不同系統(tǒng)或者不同進(jìn)程之間的數(shù)據(jù)交互,或者在高并發(fā)下的通信場景下都需要用到網(wǎng)絡(luò)通信相關(guān)的技術(shù),對于一些經(jīng)驗(yàn)豐富的程序員來說,Java早期的網(wǎng)絡(luò)通信架構(gòu)存在一些缺陷,這篇文章介紹Java?BOI與NIO
    2022-11-11
  • MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢

    MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢

    這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Spring動(dòng)態(tài)配置計(jì)時(shí)器觸發(fā)時(shí)間的實(shí)例代碼

    Spring動(dòng)態(tài)配置計(jì)時(shí)器觸發(fā)時(shí)間的實(shí)例代碼

    這篇文章主要介紹了Spring動(dòng)態(tài)配置計(jì)時(shí)器觸發(fā)時(shí)間的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 簡單了解Spring Bean常用注解的裝配

    簡單了解Spring Bean常用注解的裝配

    這篇文章主要介紹了簡單了解Spring Bean常用注解的裝配,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java結(jié)合HADOOP集群文件上傳下載

    java結(jié)合HADOOP集群文件上傳下載

    這篇文章主要介紹了java結(jié)合HADOOP集群文件上傳下載的方法和示例,非常的實(shí)用,這里推薦給大家,希望大家能夠喜歡。
    2015-03-03
  • Java Web項(xiàng)目中驗(yàn)證碼功能的制作攻略

    Java Web項(xiàng)目中驗(yàn)證碼功能的制作攻略

    使用servlet制作驗(yàn)證碼中最關(guān)鍵的部分是緩存的使用,驗(yàn)證session中的字符串,接下來我們就來看一下Java Web項(xiàng)目中驗(yàn)證碼功能的制作攻略
    2016-05-05

最新評論