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

spring cloud gateway如何獲取請求的真實地址

 更新時間:2023年05月06日 09:06:28   作者:一只豬啊啊  
這篇文章主要介紹了spring cloud gateway如何獲取請求的真實地址問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring cloud gateway獲取請求的真實地址

在使用spring cloud gateway的時候,路由一般配置為服務(wù)名

例如 lb://BASE-API-WEB/xxx/bbb 路徑,我們無從知道,他真正路由到什么地方去了。

經(jīng)過查看源碼我發(fā)現(xiàn)了,

org.springframework.cloud.gateway.filter.LoadBalancerClientFilter

這個filter中 對lb請求進(jìn)行了處理,轉(zhuǎn)換成真正的url地址。

核心方法如下

 public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
       //lb下的url
 URI url = (URI)exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
        String schemePrefix = (String)exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR);
        if (url == null || !"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix)) {
            return chain.filter(exchange);
        } else {
            ServerWebExchangeUtils.addOriginalRequestUrl(exchange, url);
            log.trace("LoadBalancerClientFilter url before: " + url);
            ServiceInstance instance = this.loadBalancer.choose(url.getHost());
            if (instance == null) {
                throw new NotFoundException("Unable to find instance for " + url.getHost());
            } else {
                URI uri = exchange.getRequest().getURI();
                String overrideScheme = null;
                if (schemePrefix != null) {
                    overrideScheme = url.getScheme();
                }
                //真實的url
                URI requestUrl = this.loadBalancer.reconstructURI(new LoadBalancerClientFilter.DelegatingServiceInstance(instance, overrideScheme), uri);
                log.trace("LoadBalancerClientFilter url chosen: " + requestUrl);
                exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, requestUrl);
                return chain.filter(exchange);
            }
        }
    }

其實,spring cloud gateway 已經(jīng)打印了日志,但是默認(rèn)的他是trace級別的,我們常用的日志級別是info級別,所有他不會打印,這就導(dǎo)致了我們在日志中看不到真實的url地址

以下是解決辦法

1.在配置文件中設(shè)置org.springframework.cloud.gateway.filter.LoadBalancerClientFilter的日志級別

logging.level.org.springframework.cloud.gateway.filter.LoadBalancerClientFilter=TRACE

注意 這里的配置一定要在

logging.level.org.springframework之后配置 不然會覆蓋

2.重寫LoadBalancerClientFilter 建立org.springframework.cloud.gateway.filter包 將 類重寫 spingboot默認(rèn)會從本項目中加載類,原先的類就被棄用了。

3.繼承LoadBalancerClientFilter 重寫filter方法,將日志級別改為info即可

  @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        URI url = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
        String schemePrefix = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR);
        if (url == null || !"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix)) {
            return chain.filter(exchange);
        } else {
            ServerWebExchangeUtils.addOriginalRequestUrl(exchange, url);
            ServiceInstance instance = this.loadBalancer.choose(url.getHost());
            if (instance == null) {
                throw new NotFoundException("Unable to find instance for " + url.getHost());
            } else {
                URI uri = exchange.getRequest().getURI();
                String overrideScheme = null;
                if (schemePrefix != null) {
                    overrideScheme = url.getScheme();
                }
                URI requestUrl = this.loadBalancer.reconstructURI(new LoadBalancerClientFilterBean.DelegatingServiceInstance(instance, overrideScheme), uri);
                logger.info("before url = {} , url chosen = {} " ,url, requestUrl);
                exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, requestUrl);
                return chain.filter(exchange);
            }
        }
    }

最終效果如下 :

spring cloud的GateWay網(wǎng)關(guān)中如何debug得到真實的路由地址

org.springframework.cloud.gateway.filter下面的

然后按下 Step over 就得到了 mergedUrl 這個變量,然后就可以看到真實請求的地址了

總結(jié)

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

相關(guān)文章

  • mybatis-plus分頁插件失效探究解決

    mybatis-plus分頁插件失效探究解決

    這篇文章主要為大家介紹了mybatis-plus分頁插件失效探究解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java實現(xiàn)文件點擊沒反應(yīng)的方法

    Java實現(xiàn)文件點擊沒反應(yīng)的方法

    jsp頁面鏈接,點擊訪問action用IO流去下載服務(wù)器上的文件,問題是任憑怎么點擊都沒反應(yīng),日志也不報錯。這篇文章給大家介紹Java實現(xiàn)文件點擊沒反應(yīng)的方法,需要的朋友參考下吧
    2018-07-07
  • spring通過jdbc連接數(shù)據(jù)庫

    spring通過jdbc連接數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了spring通過jdbc連接數(shù)據(jù)庫的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • IDEA內(nèi)存調(diào)試插件(好用)

    IDEA內(nèi)存調(diào)試插件(好用)

    本文給大家分享IDEA中一個很有用的內(nèi)存調(diào)試插件,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2018-02-02
  • Spring注入方式有哪些

    Spring注入方式有哪些

    你知道Spring的注入方式有哪幾種嗎?這篇文章主要為大家詳細(xì)介紹了Spring的注入方式,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java 如何調(diào)用long的最大值和最小值

    Java 如何調(diào)用long的最大值和最小值

    這篇文章主要介紹了Java 如何調(diào)用long的最大值和最小值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring?Boot?整合?Fisco?Bcos的案例分析(區(qū)塊鏈)

    Spring?Boot?整合?Fisco?Bcos的案例分析(區(qū)塊鏈)

    本篇文章介紹的?Spring?Boot?整合?Fisco?Bcos的案例,是在阿里云服務(wù)器上部署驗證的。大家可根據(jù)自己的電腦環(huán)境,對比該案例進(jìn)行開發(fā)即可,具體案例代碼跟隨小編一起看看吧
    2022-01-01
  • Java實現(xiàn)簡單的日歷界面

    Java實現(xiàn)簡單的日歷界面

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單的日歷界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 線程池中使用spring aop事務(wù)增強(qiáng)

    線程池中使用spring aop事務(wù)增強(qiáng)

    這篇文章主要介紹了線程池中使用spring aop事務(wù)增強(qiáng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot集成JWT的工具類與攔截器實現(xiàn)方式

    SpringBoot集成JWT的工具類與攔截器實現(xiàn)方式

    這篇文章主要介紹了SpringBoot集成JWT的工具類與攔截器實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論