亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springcloud gateway設(shè)置context-path的操作

 更新時(shí)間:2021年07月15日 14:42:18   作者:烤鴨的世界我們不懂  
這篇文章主要介紹了springcloud gateway設(shè)置context-path的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

今天說一下遇到的問題,關(guān)于 springcloud gateway 設(shè)置 context-path 的問題。

1.使用場景

由于沒有申請二級域名,網(wǎng)關(guān)使用的地址是 xxx.com/gateway/ 用nginx轉(zhuǎn)發(fā)的時(shí)候 /gateway/ 也被用來尋址。

gateway 沒辦法設(shè)置 context-path ,針對我這個(gè)場景有3個(gè)解決方案。

2.解決方案

2.1 增加本地路由(有一個(gè)網(wǎng)址指向自己,這里就是 /gateway)

spring:
  cloud:
    gateway:
      routes:
      # 網(wǎng)關(guān)本身沒有contextPath,通過自己轉(zhuǎn)發(fā)自己,達(dá)到能處理contextPath
      - id: self
        uri: http://localhost:${server.port}
        predicates:
        - Path=/${spring.application.name}/**
        filters:
        - StripPrefix=1
        order: -11000

這種方式會丟失請求,暫時(shí)沒考慮原因,就pass了。

2.2 增加過濾器,改寫路徑

ApiFilter.java

package com.yiche.ballast.filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.WebFilter;
import reactor.core.publisher.Mono; 
 
@Configuration
public class ApiFilter {
    @Value("${spring.cloud.gateway.api-prefix:/gateway}")
    private String prefix; 
    @Bean
    @Order(-1)
    public WebFilter apiPrefixFilter() {
        return (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
 
            String path = request.getURI().getRawPath();
            if (!path.contains(prefix)) {
                ServerHttpResponse response = exchange.getResponse();
                response.setStatusCode(HttpStatus.BAD_GATEWAY);
 
                DataBuffer buffer = response
                        .bufferFactory()
                        .wrap(HttpStatus.BAD_GATEWAY.getReasonPhrase().getBytes());
                return response.writeWith(Mono.just(buffer));
            }
            String newPath = path.replaceFirst(prefix, "");
            ServerHttpRequest newRequest = request.mutate().path(newPath).build();
 
            return chain.filter(exchange.mutate().request(newRequest).build());
        };
    }
}

這樣/gateway 請求進(jìn)來之后,轉(zhuǎn)發(fā)到routers 的時(shí)候會把 /gateway去掉,缺點(diǎn)是每個(gè)請求進(jìn)來都需要對路徑處理一次。

能配置的盡量不寫代碼。

2.3 修改配置,在所有的router路徑前加前綴(這里就是都加上 /gateway)

spring:
    cloud:
        gateway:
            routes:
            - id: api-route
              filters:
                - StripPrefix=1
              predicates:
                - name: Path
                  args[pattern]: /gateway/api/**
              uri: lb://xxx-api

偷懶的做法,路由多的時(shí)候也挺難受。

現(xiàn)在路由不多,選擇了第三種方式??锤髯缘膱鼍斑x擇吧。

springcloud 的gateway踩坑

添加了路由規(guī)則的配置以后,SpringCloud無法正常啟動(dòng),啟動(dòng)的時(shí)候報(bào)錯(cuò)

1、配置文件中開啟debug=true模式

錯(cuò)誤信息顯示缺少javax.validation.ValidatorException類;

2、在pom文件中添加hibernate-validator(以及所有相關(guān)依賴)

3、結(jié)果仍舊報(bào)錯(cuò),此時(shí)錯(cuò)誤信息:

不能為空,之前是配置在yml文件中,后來換成了properties,問題就解決了;

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

相關(guān)文章

  • 初識Java8中的Stream

    初識Java8中的Stream

    lambda表達(dá)式是stream的基礎(chǔ),接下來通過實(shí)例代碼給大家詳細(xì)介紹java8中的stream,感興趣的朋友一起看看吧
    2017-08-08
  • Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn)

    Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn)

    超時(shí)設(shè)置是網(wǎng)絡(luò)編程中不可忽視的一部分,本文就來介紹一下Java中OkHttp 超時(shí)設(shè)置的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法示例

    Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法,結(jié)合實(shí)例形式分析了java有效隊(duì)列的數(shù)據(jù)插入、刪除、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • idea Gradle 控制臺中文亂碼的解決

    idea Gradle 控制臺中文亂碼的解決

    通過IDEA執(zhí)行g(shù)radle的任務(wù)時(shí),在終端的輸出出現(xiàn)中文亂碼,本文主要介紹了idea Gradle 控制臺中文亂碼的解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Simple Java Mail郵件發(fā)送實(shí)現(xiàn)過程解析

    Simple Java Mail郵件發(fā)送實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Simple Java Mail郵件發(fā)送實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • spring boot 自定義參數(shù)過濾器,把傳入的空字符轉(zhuǎn)換成null方式

    spring boot 自定義參數(shù)過濾器,把傳入的空字符轉(zhuǎn)換成null方式

    這篇文章主要介紹了spring boot 自定義參數(shù)過濾器,把傳入的空字符轉(zhuǎn)換成null方式。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • MyBatis映射文件resultMap元素中使用多個(gè)association的方法

    MyBatis映射文件resultMap元素中使用多個(gè)association的方法

    這篇文章主要介紹了MyBatis映射文件resultMap元素中使用多個(gè)association的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議

    這篇文章主要介紹了Mybatis學(xué)習(xí)總結(jié)之mybatis使用建議的相關(guān)資料,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • 利用Java手寫阻塞隊(duì)列的示例代碼

    利用Java手寫阻塞隊(duì)列的示例代碼

    在我們平時(shí)編程的時(shí)候一個(gè)很重要的工具就是容器,在本篇文章當(dāng)中主要給大家介紹阻塞隊(duì)列的原理,并且在了解原理之后自己動(dòng)手實(shí)現(xiàn)一個(gè)低配版的阻塞隊(duì)列,感興趣的可以嘗試一下
    2022-08-08
  • 深入了解java 8的函數(shù)式編程

    深入了解java 8的函數(shù)式編程

    函數(shù)式編程并不是Java新提出的概念,其與指令編程相比,強(qiáng)調(diào)函數(shù)的計(jì)算比指令的計(jì)算更重要;與過程化編程相比,其中函數(shù)的計(jì)算可以隨時(shí)調(diào)用。下面我們來詳細(xì)了解一下吧
    2019-06-06

最新評論