国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring-Cloud-Gateway如何自定義路由過濾器?

這篇具有很好參考價值的文章主要介紹了Spring-Cloud-Gateway如何自定義路由過濾器?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

遇到這么一個面試題:自定義網(wǎng)關(guān)過濾器實現(xiàn)把url中的請求參數(shù)放到http的header中傳遞給微服務(wù)。
我們知道網(wǎng)關(guān)的一個重要的作用就是路由轉(zhuǎn)發(fā),路由表的配置大概是這個樣子:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: http://localhost:8081
          predicates:
            - Path=/user/*
          filters:
            - QueryToHeader=authorization,auth

其中的filters就是配置的路由過濾器,Spring已經(jīng)內(nèi)置了31個路由的過濾器,這些過濾器都是org.springframework.cloud.gateway.filter.GatewayFilter的子類,每一種過濾器都是由一種實現(xiàn)了org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory接口的過濾器工廠來生成的,比如:

  • AddRequestHeaderGatewayFilterFactory生成AddRequestHeader的過濾器
  • AddRequestParameterGatewayFilterFactory生成AddRequestParameter的過濾器
  • StripPrefixGatewayFilterFactory生成StripPrefix的過濾器.
    我們現(xiàn)在就需要自定義一個這樣的路由過濾器,實現(xiàn)把url中的請求參數(shù)放到http的header中傳遞給微服務(wù),比如:
  filters:
      - QueryToHeader=authorization,auth

首先,我們要寫一個GatewayFilterFactory的實現(xiàn)類,這里我們選擇繼承AbstractGatewayFilterFactory:

@Component
public class QueryToHeaderGatewayFilterFactory extends
        AbstractGatewayFilterFactory<QueryToHeaderGatewayFilterFactory.QueryToHeaderConfig> {

    public QueryToHeaderGatewayFilterFactory() {
        super(QueryToHeaderConfig.class);
    }

	/**定義路由過濾器的參數(shù)的順序*/
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("queryName", "headerName");
    }

    @Override
    public GatewayFilter apply(final QueryToHeaderConfig config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                ServerHttpRequest request = exchange.getRequest();
                // 根據(jù)請求參數(shù)的名字,獲取參數(shù)的值
                String queryValue = request.getQueryParams().getFirst(config.getQueryName());
                // 如果沒有值,直接放行
                if(!StringUtils.hasLength(queryValue)){
                    return chain.filter(exchange);
                }
                // 把參數(shù)重新放到header中,header的key是在配置中配置好的
                request.mutate().header(config.getHeaderName(), queryValue);
                return chain.filter(exchange);
            }
        };
    }
    /**封裝路由過濾器的參數(shù)*/
    @Validated
    public static class QueryToHeaderConfig {
        protected @NotEmpty String queryName;
        protected @NotEmpty String headerName;
        public QueryToHeaderConfig() {
        }
        public String getQueryName() {
            return this.queryName;
        }
        public QueryToHeaderConfig setQueryName(String queryName) {
            this.queryName = queryName;
            return this;
        }
        public String getHeaderName() {
            return this.headerName;
        }
        public QueryToHeaderConfig setHeaderName(String headerName) {
            this.headerName = headerName;
            return this;
        }
        @Override
        public String toString() {
            return (new ToStringCreator(this)).append("headerName", this.headerName).append("queryName", this.queryName).toString();
        }
    }
}

打開瀏覽器,測試一下,比如輸入:http://localhost:8080/user/2?authorization=456
微服務(wù)中可以從header中讀取到auth的值是456。
源碼下載:https://github.com/xjs1919/enumdemo/tree/master/gateway-filter-demo文章來源地址http://www.zghlxwxcb.cn/news/detail-600096.html

到了這里,關(guān)于Spring-Cloud-Gateway如何自定義路由過濾器?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • spring-cloud-gateway版本和springboot版本不匹配

    在搭建gateway服務(wù)的時候,啟動出現(xiàn)以下問題: Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: ? ? org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyConfiguration.buildConnectionProvider(GatewayAutoConfiguration.java:798) The following method did no

    2024年02月16日
    瀏覽(22)
  • 芝法醬躺平攻略(14)——Nginx與Spring-Cloud-Gateway

    芝法醬躺平攻略(14)——Nginx與Spring-Cloud-Gateway

    上一章芝法醬躺平攻略(12)展望了微服務(wù)下常見的技術(shù)需求與常見解決方案,本期來講解第一部分,Nginx與SpringCloud-Gateway。 本章將實踐在nginx和spring-cloud-gateway的簡單使用。 首先,去官網(wǎng)查找最新穩(wěn)定版,把下載的nginx包放到DOWNLOAD文件夾下。 而后把該包解壓到SOFTWARE文件夾

    2024年02月07日
    瀏覽(32)
  • Spring-Cloud-Gateway修改請求(json,form帶文件請求)參數(shù),返回值參數(shù)

    新項目需要在getway統(tǒng)一做入?yún)ⅰ⒊鰠⒓咏饷?,記錄日志。記錄一下form,x-www-form-urlencoded , json 這幾種修改數(shù)據(jù)的方式。 gateway做攔截器是實現(xiàn)GlobalFilter接口,修改json方式網(wǎng)上有很多文章,后來又想研究研究能不能實現(xiàn)修改form-data參數(shù),以及文件請求,后者文章不多大部分是怎

    2024年02月16日
    瀏覽(28)
  • Spring Cloud Gateway 路由配置策略

    Spring Cloud Gateway 是一個基于 Spring Boot 2.x 和 Spring WebFlux 的輕量級網(wǎng)關(guān)服務(wù),用于構(gòu)建微服務(wù)架構(gòu)中的 API 網(wǎng)關(guān)。它提供了一種簡單、高效、靈活和可擴展的方式來路由請求到后端的微服務(wù)。 Spring Cloud Gateway 的核心特性包括: 路由功能:可以根據(jù)請求的屬性(路徑、參數(shù)等)將

    2024年01月20日
    瀏覽(20)
  • Spring Cloud Gateway 監(jiān)控、多網(wǎng)關(guān)實例路由共享 | Spring Cloud 18

    Actuator 是 Spring Boot 提供的用來對應(yīng)用系統(tǒng)進行監(jiān)控的功能模塊,借助于 Actuator 開發(fā)者可以很方便地對應(yīng)用系統(tǒng)某些監(jiān)控指標進行查看、統(tǒng)計等。 Actuator 的核心是端點 Endpoint 。 Endpoint 可以讓我們監(jiān)視應(yīng)用程序并與其交互。 Spring Boot 包含許多內(nèi)置端點,并允許您添加自己的端

    2024年02月09日
    瀏覽(27)
  • 三分鐘了解Spring Cloud Gateway路由轉(zhuǎn)發(fā)之自動路由

    三分鐘了解Spring Cloud Gateway路由轉(zhuǎn)發(fā)之自動路由

    大家好,我是冰點,今天和大家分享一下關(guān)于Spring Cloud Gateway 利用服務(wù)注冊與發(fā)現(xiàn)實現(xiàn)自動路由的原理和源碼解讀。希望對大家有所幫助。 今天有個新同學,問我 為什么我們的網(wǎng)關(guān)服務(wù)Spring Cloud Gateway,沒有配置路由就可以將請求到路由服務(wù) ,說他們之前的項目的網(wǎng)關(guān)是將

    2024年02月08日
    瀏覽(17)
  • spring cloud gateway網(wǎng)關(guān)(一)之網(wǎng)關(guān)路由

    spring cloud gateway網(wǎng)關(guān)(一)之網(wǎng)關(guān)路由

    1、gateway相關(guān)介紹 在微服務(wù)架構(gòu)中,系統(tǒng)往往由多個微服務(wù)組成,而這些服務(wù)可能部署在不同機房、不同地區(qū)、不同域名下。這種情況下,客戶端(例如瀏覽器、手機、軟件工具等)想要直接請求這些服務(wù),就需要知道它們具體的地址信息,例如 IP 地址、端口號等。這種客戶

    2024年02月08日
    瀏覽(24)
  • 【Spring Cloud Alibaba】8.路由網(wǎng)關(guān)(Gateway)

    【Spring Cloud Alibaba】8.路由網(wǎng)關(guān)(Gateway)

    接下來對服務(wù)消費者添加路由網(wǎng)關(guān)來實現(xiàn)統(tǒng)一訪問接口,本操作先要完成之前的步驟,詳情請參照【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0 , Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān),該項目提供了一個庫,用于在 Spring W

    2023年04月24日
    瀏覽(22)
  • 【源碼】Spring Cloud Gateway 是在哪里匹配路由的?

    【源碼】Spring Cloud Gateway 是在哪里匹配路由的?

    我們知道,經(jīng)過網(wǎng)關(guān)的業(yè)務(wù)請求會被路由到后端真實的業(yè)務(wù)服務(wù)上去,假如我們使用的是Spring Cloud Gateway,那么你知道Spring Cloud Gateway是在哪一步去匹配路由的嗎? 源碼之下無秘密,讓我們一起從源碼中尋找答案。 Spring Cloud Gateway 的入口為 DispatcherHandler 的 handle 方法,其中主

    2023年04月24日
    瀏覽(26)
  • 【深入解析spring cloud gateway】02 網(wǎng)關(guān)路由斷言

    【深入解析spring cloud gateway】02 網(wǎng)關(guān)路由斷言

    斷言是路由配置的一部分,當斷言條件滿足,即執(zhí)行Filter的邏輯,如下例所示 當請求路徑滿足條件/red/,即添加頭信息:X-Request-Red,value為Blue-{segment},segment是路徑里面帶的信息。 gateWay的主要功能之一是轉(zhuǎn)發(fā)請求,轉(zhuǎn)發(fā)規(guī)則的定義主要包含三個部分 Route(路由) 路由是網(wǎng)關(guān)

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包