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

【SpringCloud】SpringCloud Gateway詳解

這篇具有很好參考價值的文章主要介紹了【SpringCloud】SpringCloud Gateway詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

微服務(wù)分為多個服務(wù),有很多服務(wù)是內(nèi)部人員要用的,但是現(xiàn)在誰都可以訪問到,那我們該怎么辦呢?

Spring Cloud最新面試題
Spring Cloud Nacos詳解之注冊中心
Spring Cloud Nacos詳解之配置中心
Spring Cloud Nacos詳解之集群配置
Spring Cloud Eureka詳解
Spring Cloud Frign詳解
Spring Cloud Ribbon詳解
Spring Cloud Hystrix詳解

SpringCloud Gatewy網(wǎng)關(guān)

一.網(wǎng)關(guān)功能和工作原理

spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

二.網(wǎng)關(guān)的類型

  • Gateway
    響應(yīng)式編程,具有更好的性能。

  • Zuul
    阻塞式編程。

三.搭建網(wǎng)關(guān)

1.創(chuàng)建一個新的服務(wù)

spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

2.添加網(wǎng)關(guān)依賴和nacos服務(wù)發(fā)現(xiàn)依賴

		<!--nacos服務(wù)注冊發(fā)現(xiàn)依賴-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        
        <!--網(wǎng)關(guān)gateway依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

3.編寫yml配置文件

server:
  port: 10086  #端口號
spring:
  application:
    name: gateway #服務(wù)名稱
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes: 
        - id: user-service # 路由id,必須唯一。  用戶服務(wù)
          uri: lb://userservice # 路由的目標(biāo)地址,lb是負(fù)載均衡。 
          # uri: http://127.0.0.1/user/1   也可以使用這種,但是這種就固定了路由地址,就不能負(fù)載均衡了。
          predicates: # 路由斷言,判斷請求是否符合規(guī)則,符合就轉(zhuǎn)發(fā)到目的路由??梢耘渲枚鄠€規(guī)則
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合。
       - id: order-service  # 訂單服務(wù)
         uri: lb://orderservice
         predicates:
           - Path=/order/**

四.路由斷言工廠(Route Predicate Factory)

官網(wǎng)示例

屬性 描述 示例
After 是某個時間點之后的請求 -After=2023-01-01T17:42:47.789-07:00[America/Denver]
(必須在2023年1月1日17點42分47秒之后發(fā)的請求才能通過,根據(jù)美國丹佛[America/Denver]的時間算)
Before 是某個時間點之前的請求 -Before=2022-02-22T22:22:22.433+8:00[Asia/Shanghai]
(必須在2022年2月22日22時22分22秒之前發(fā)的請求才能通過,根據(jù)[Asia/Shanghai]上海時間算)
Between 是某兩個時間點之前的請求 -Between=時間[時區(qū)],時間[時區(qū)]
Cookie 請求必須包含某些cookie - Cookie=ikun, rap
Header 請求必須包含某些header - Header=X-Request-Id,\d+
Host 請求必須是訪問某個host(域名) - Host=**.kunkun,**com.cn
Method 請求方式必須是指定方式 -Method=GETPOST
Path 請求路徑必須符合指定規(guī)則 -path=user/**
Query 請求參數(shù)必須包含指定參數(shù) Query=ikun
RemoteAddr 請求者的ip必須是指定范圍 - RemoteAddr=192.168.1.1/24
Weight 權(quán)重處理

五.路由過濾器(屬于GatewayFilter)

對進(jìn)入網(wǎng)關(guān)的請求和微服務(wù)返回的響應(yīng)做處理。比如:添加請求頭。
官網(wǎng)示例

1.配置網(wǎng)關(guān)服務(wù)yml文件

路由過濾器:對當(dāng)前路由生效。
server:
  port: 10086  #端口號
spring:
  application:
    name: gateway #服務(wù)名稱
  cloud:
    gateway:
      routes: 
        - id: user-service # 路由id,必須唯一。  用戶服務(wù)
          uri: lb://userservice # 路由的目標(biāo)地址,lb是負(fù)載均衡。 
          # uri: http://127.0.0.1/user/1   也可以使用這種,但是這種就固定了路由地址,就不能負(fù)載均衡了。
          predicates: # 路由斷言,判斷請求是否符合規(guī)則,符合就轉(zhuǎn)發(fā)到目的路由??梢耘渲枚鄠€規(guī)則
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合。
		  filters:
        	- AddRequestHeader=Ikun,ji ni tai mei!  # 添加請求頭,針對某個服務(wù)生效。

2.在添加請求頭的服務(wù)編寫代碼

	在用戶服務(wù)的controller里面寫
	/**
     * @param id 用戶id
     * @return 用戶
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id,
                          @RequestHeader(value = "Ikun", required = false) String ikun) {
        System.out.println("Ikun最喜歡的歌是什么:" + ikun);
        return userService.queryById(id);
    }

然后訪問 localhost:10086/user/1,控制臺就會打印 ikun 的值。
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

六.DefaultFilter過濾器(屬于GatewayFilter)

DefaultFilter:對所有路由都生效。
server:
  port: 10086  #端口號
spring:
  application:
    name: gateway #服務(wù)名稱
  cloud:
    gateway:
      routes: 
        - id: user-service # 路由id,必須唯一。  用戶服務(wù)
          uri: lb://userservice # 路由的目標(biāo)地址,lb是負(fù)載均衡。 
          # uri: http://127.0.0.1/user/1   也可以使用這種,但是這種就固定了路由地址,就不能負(fù)載均衡了。
          predicates: # 路由斷言,判斷請求是否符合規(guī)則,符合就轉(zhuǎn)發(fā)到目的路由。可以配置多個規(guī)則
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合。
	   default-filters:
        - AddRequestHeader=Ikun,ji ni tai mei!  #添加請求頭,全局生效

七.全局過濾器(GlobalFilter)

對進(jìn)入網(wǎng)關(guān)的請求和微服務(wù)返回的響應(yīng)做處理。和GatewayFilter作用一樣

因為GatewayFilter是基于配置實現(xiàn),處理的邏輯是固定的,GlobalFilter基于代碼邏輯實現(xiàn),更加靈活一些,可以用于驗證用戶身份等功能。

1.實現(xiàn)GlobalFilter接口

驗證身份信息,根據(jù)authorization的值是否是ikun
// @Order(-1) 注解方式實現(xiàn),如果有多個過濾器,越小越早走。
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.獲取請求參數(shù)
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> params = request.getQueryParams();
        // 2.獲取參數(shù)中的 authorization 參數(shù)
        String auth = params.getFirst("authorization");
        // 3.判斷參數(shù)值是否等于 ikun
        if ("ikun".equals(auth)) {
            // 4.是,放行
            return chain.filter(exchange);
        }
        // 5.否,攔截
        // 5.1.設(shè)置狀態(tài)碼,未登錄
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        // 5.2.攔截請求
        return exchange.getResponse().setComplete();
    }

	/**
	* 代碼方式實現(xiàn),實現(xiàn) Ordered 接口,多個過濾器,返回值越小,越早走。
	**/
    @Override
    public int getOrder() {
        return -1;
    }
}

2.驗證身份

(1) 如果authorization 參數(shù)不等于ikun或沒有都會報錯。
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

(2) authorization 參數(shù)等于 ikun正常訪問。
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

八.過濾器執(zhí)行順序

請求路由后,會將當(dāng)前路由過濾器和DefaultFilter、GlobalFilter,合并到一個過濾鏈(集合)中,排序后依次執(zhí)行每個過濾器**(DefaultFilter -> 路由過濾器 -> GlobalFilter)**。

1.為什么不是同一個過濾器可以放在一個過濾鏈中呢?由下面可得這三個過濾器本質(zhì)上都是GatewayFilter

DefaultFilter 和 路由過濾器的實現(xiàn)都是 AddRequestHeaderGatewayFilterFactory 類,最后會生成一個真正的過濾器(GatewayFilter)。
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

GlobalFilter的實現(xiàn)是通過 GatewayFilterAdapter 適配器類實現(xiàn)了GatewayFilter,然后就可以把GlobalFilter適配成GatewayFilter。
spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

2.路由過濾器和DefaultFilter怎么設(shè)置@Order順序呢?

由spring指定order,按聲明順序1開始遞增。

spring.cloud.gateway,springCloud系列,spring cloud,gateway,java,網(wǎng)關(guān),過濾

擴(kuò)展:

  • org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加載defaultFilters,然后再加載某個route的filters,然后合并。
  • org.springframework.cloud.gateway.handler.FilteringlWebHandler#handle()方法會加載全局過濾器與前面的過濾器合并后根據(jù)order排序,組織過濾器鏈。

九.Gateway解決跨域問題

跨域: 瀏覽器禁止請求的發(fā)起者與服務(wù)端發(fā)生跨域ajax請求,請求被瀏覽器攔截的問題。
解決: 采用CORS方案,網(wǎng)關(guān)處理跨域采用的同樣是CORS方案。(簡單來說就是瀏覽器詢問服務(wù)端讓不讓這個請求跨域,如果讓會返回結(jié)果)。文章來源地址http://www.zghlxwxcb.cn/news/detail-659482.html

在yml文件配置以下內(nèi)容
spring:
  cloud:
	gateway:
      globalcors: # 全局的跨域處理
        add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題(瀏覽器去詢問服務(wù)端的請求就是options)
        corsConfigurations:
          '[/**]':
            allowedOrigins:  # 允許哪些網(wǎng)站的跨域請求
              -"http://localhost:8888"
              -"http://www.ikun.com"
            allowedMethods: # 允許的跨域ajax的請求方式          
              -"GET"
			  -"POST"
		      -"DELETE"
			  -"PUT"
			  -"OPTIONS"
			allowedHeaders: "*" # 允許請求頭跨域
			allowCredentials: true # 是否允許攜帶cookie
			maxAge: 360000 # 這次跨域檢測的有效期

到了這里,關(guān)于【SpringCloud】SpringCloud Gateway詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • SpringCloud網(wǎng)關(guān)Gateway認(rèn)證鑒權(quán)【SpringCloud系列7】

    SpringCloud網(wǎng)關(guān)Gateway認(rèn)證鑒權(quán)【SpringCloud系列7】

    SpringCloud 大型系列課程正在制作中,歡迎大家關(guān)注與提意見。 程序員每天的CV 與 板磚,也要知其所以然,本系列課程可以幫助初學(xué)者學(xué)習(xí) SpringBooot 項目開發(fā) 與 SpringCloud 微服務(wù)系列項目開發(fā) 本文章是系列文章中的一篇 1、SpringCloud 項目基礎(chǔ)工程搭建 【SpringCloud系列1】 2、S

    2024年02月09日
    瀏覽(24)
  • SpringCloud Gateway用法詳解

    目錄 零、人在月球 一、功能簡介 1、網(wǎng)關(guān)是一個服務(wù): 二、Gateway 斷言 1、path斷言 2、Query斷言 3、Method斷言 4、Host斷言 5、Cookie斷言 6、Header斷言 7、Weight 權(quán)重路由 8、After 時間路由 9、Before 時間路由 10、Between時間區(qū)間路由 11、灰度發(fā)布 三、Gateway 過濾器 1、增加header 請求頭

    2024年02月02日
    瀏覽(25)
  • Springcloud 之Gateway組件詳解

    Springcloud 之Gateway組件詳解

    ? 目錄 1.網(wǎng)關(guān) 1.1 網(wǎng)關(guān)簡介 1.2 網(wǎng)關(guān)組件 1.2.1 Gateway介紹 1.2.2 Gateway實踐 1.2.3 Gateway執(zhí)行流程 1.2.4 斷言工廠 1.2.5 過濾器 ? 大家都都知道在微服務(wù)架構(gòu)中,一個系統(tǒng)會被拆分為很多個微服務(wù)。那么作為客戶端要如何去調(diào)用這么多的微服務(wù)呢?如果沒有網(wǎng)關(guān)的存在,我們只能在客戶

    2024年02月03日
    瀏覽(18)
  • SpringCloud Gateway詳解與配置

    SpringCloud Gateway詳解與配置

    從0到1構(gòu)建Gateway 手動構(gòu)建 基本配置 Route組成 配置方式 ?1.yml文件配置 ?2.New Bean配置 常用的 Route Predicate Factory介紹 用來構(gòu)建 API 網(wǎng)關(guān)。Spring Cloud Gateway 旨在提供一種簡單而有效的方式來路由到 API,并為它們提供橫切關(guān)注點,例如:安全性、監(jiān)控/指標(biāo)和彈性。? 動態(tài)路由:能

    2023年04月08日
    瀏覽(14)
  • SpringCloud 微服務(wù)系列——【Gateway、Config組件使用】

    SpringCloud 微服務(wù)系列——【Gateway、Config組件使用】

    ?作者簡介:2022年 博客新星 第八 。熱愛國學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進(jìn)。 ??個人主頁:Java Fans的博客 ??個人信條:不遷怒,不貳過。小知識,大智慧。 ??當(dāng)前專欄:SpringCloud 微服務(wù)學(xué)習(xí)專欄 ?特色專欄:國學(xué)周更-心性養(yǎng)成之路 ??本文內(nèi)容:SpringCloud 微服

    2024年02月04日
    瀏覽(15)
  • SpringCloud Gateway 整合RSA對請求參數(shù)解密、響應(yīng)結(jié)果加密【SpringCloud系列10】

    SpringCloud Gateway 整合RSA對請求參數(shù)解密、響應(yīng)結(jié)果加密【SpringCloud系列10】

    本文章實現(xiàn)的是 網(wǎng)關(guān)中的 參數(shù)解密、響應(yīng)數(shù)據(jù)體加密功能。 1 集成 commons-codec commons-codec 是Apache開源組織提供的用于摘要運算、編碼解碼的包。常見的編碼解碼工具Base64、MD5、Hex、SHA1、DES等。 本項目中集成RSA 非對稱算法,RSAUtils 工具類 然后創(chuàng)建一個測試類,生成一組公鑰

    2024年02月06日
    瀏覽(21)
  • 【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(2)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway功能配置指南分析

    【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(2)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway功能配置指南分析

    Spring Cloud Gateway簡介 Spring Cloud Gateway是Spring Cloud體系的第二代網(wǎng)關(guān)組件,基于Spring 5.0的新特性WebFlux進(jìn)行開發(fā),底層網(wǎng)絡(luò)通信框架使用的是Netty,所以其吞吐量高、性能強(qiáng)勁,未來將會取代第一代的網(wǎng)關(guān)組件Zuul。 Spring Cloud Gateway可以通過服務(wù)發(fā)現(xiàn)組件自動轉(zhuǎn)發(fā)請求,默認(rèn)集成了

    2024年02月11日
    瀏覽(53)
  • 【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(1)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway組件的原理介紹分析

    【SpringCloud技術(shù)專題】「Gateway網(wǎng)關(guān)系列」(1)微服務(wù)網(wǎng)關(guān)服務(wù)的Gateway組件的原理介紹分析

    為什么要有服務(wù)網(wǎng)關(guān)? 我們都知道在微服務(wù)架構(gòu)中,系統(tǒng)會被拆分為很多個微服務(wù)。那么作為客戶端要如何去調(diào)用這么多的微服務(wù)呢?難道要一個個的去調(diào)用嗎?很顯然這是不太實際的,我們需要有一個統(tǒng)一的接口與這些微服務(wù)打交道,這就是我們需要服務(wù)網(wǎng)關(guān)的原因。 我們

    2024年02月11日
    瀏覽(32)
  • 【SpringCloud微服務(wù)項目實戰(zhàn)-mall4cloud項目(2)】——mall4cloud-gateway

    【SpringCloud微服務(wù)項目實戰(zhàn)-mall4cloud項目(2)】——mall4cloud-gateway

    代碼地址 github地址 fork自github原始項目 gitee地址 fork自gitee原始項目 從圖中可以看到,在用戶端和靜態(tài)層通過接入層(nginx+防火墻)后就會到達(dá)后端服務(wù)中,首先要通過的便是網(wǎng)關(guān)層,網(wǎng)關(guān)層由springCloud gateway2+負(fù)載均衡去實現(xiàn)。 微服務(wù)架構(gòu)中的網(wǎng)關(guān)層充當(dāng)了微服務(wù)體系結(jié)構(gòu)的

    2024年01月19日
    瀏覽(24)
  • SpringCloud gateway+Spring Security + JWT實現(xiàn)登錄和用戶權(quán)限校驗

    SpringCloud gateway+Spring Security + JWT實現(xiàn)登錄和用戶權(quán)限校驗

    原本打算將Security模塊與gateway模塊分開寫的,但想到gateway本來就有過濾的作用 ,于是就把gateway和Security結(jié)合在一起了,然后結(jié)合JWT令牌對用戶身份和權(quán)限進(jìn)行校驗。 Spring Cloud的網(wǎng)關(guān)與傳統(tǒng)的SpringMVC不同,gateway是基于Netty容器,采用的webflux技術(shù),所以gateway模塊不能引入spri

    2024年02月03日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包