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

微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway

這篇具有很好參考價值的文章主要介紹了微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

8.統(tǒng)一網(wǎng)關(guān)Gateway

網(wǎng)關(guān)功能:

  • 身份認證和權(quán)限校驗
  • 服務(wù)路由、負載均衡
  • 請求限流

微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway,微服務(wù)中間件,微服務(wù),中間件,gateway,spring cloud,java

網(wǎng)關(guān)的技術(shù)實現(xiàn)

在SpringCloud中網(wǎng)關(guān)的實現(xiàn)包括兩種:

  • gateway
  • zuul

Zuul是基于Servlet的實現(xiàn),屬于阻塞式編程。而SpringCloudGateway則是基于Spring5中提供的WebFlux,屬于響應(yīng)式編程的實現(xiàn),具備更好的性能。

a.搭建網(wǎng)關(guān)服務(wù)

搭建網(wǎng)關(guān)服務(wù)的步驟:

1.創(chuàng)建新的module,引入SpringCloudGateway的依賴和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>

2.編寫路由配置及nacos地址,在application.yml中編寫

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由標(biāo)識,必須唯一
          uri: lb://userservice # 路由的目標(biāo)地址
          predicates: # 路由斷言,判斷請求是否符合規(guī)則
            - Path=/user/** # 路徑斷言,判斷路徑是否是以/user開頭,如果是則符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway,微服務(wù)中間件,微服務(wù),中間件,gateway,spring cloud,java

b.路由斷言工廠

網(wǎng)關(guān)路由可以配置的內(nèi)容包括:

  • 路由id:路由唯一標(biāo)示
  • uri:路由目的地,支持lb和http兩種
  • predicates:路由斷言,判斷請求是否符合要求,符合則轉(zhuǎn)發(fā)到路由目的地
  • filters:路由過濾器,處理請求或響應(yīng)

路由斷言工廠Route Predicate Factory

  • 我們在配置文件中寫的斷言規(guī)則只是字符串,這些字符串會被Predicate Factory讀取并處理,轉(zhuǎn)變?yōu)槁酚膳袛嗟臈l件
  • 例如Path=/user/**是按照路徑匹配,這個規(guī)則是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory類來處理的
  • 像這樣的斷言工廠在SpringCloudGateway還有十幾個

微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway,微服務(wù)中間件,微服務(wù),中間件,gateway,spring cloud,java

  • PredicateFactory的作用是什么?
    • 讀取用戶定義的斷言條件,對請求做出判斷
  • Path=/user/**是什么含義?
    • 路徑是以/user開頭的就認為是符合的

c.路由過濾器GatewayFilter

GatewayFilter是網(wǎng)關(guān)中提供的一種過濾器,可以對進入網(wǎng)關(guān)的請求和微服務(wù)返回的響應(yīng)做處理:

微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway,微服務(wù)中間件,微服務(wù),中間件,gateway,spring cloud,java
微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)Gateway,微服務(wù)中間件,微服務(wù),中間件,gateway,spring cloud,java

案例:給所有進入userservice的請求添加一個請求頭

給所有進入userservice的請求添加一個請求頭:Truth=ABCDEFGHIJKLMN

實現(xiàn)方式:在gateway中修改application.yml文件,給userservice的路由添加過濾器:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service 
          uri: lb://userservice
          predicates: 
            - Path=/user/**
          filters: # 過濾器
            - AddRequestHeader=Truth, ABCDEFGHIJKLMN # 添加請求頭

默認過濾器

如果要對所有的路由都生效,則可以將過濾器工廠寫到default下。格式如下:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service 
          uri: lb://userservice 
          predicates:
            - Path=/user/**
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
            - Before=2031-01-20T17:42:47.789-07:00[Asia/Shanghai]
      default-filters: # 默認過濾器,會對所有的路由請求都生效
        - AddRequestHeader=Truth, ABCDEFGHIJKLMN # 添加請求頭

需要在相應(yīng)的Controller中,獲取請求頭的參數(shù)與打印

過濾器的作用是什么?

  • 對路由的請求或響應(yīng)做加工處理,比如添加請求頭
  • 配置在路由下的過濾器只對當(dāng)前路由的請求生效

defaultFilters的作用是什么?

  • 對所有路由都生效的過濾器

d.全局過濾器GlobalFilter

全局過濾器的作用也是處理一切進入網(wǎng)關(guān)的請求和微服務(wù)響應(yīng),與GatewayFilter的作用一樣。

區(qū)別在于GatewayFilter通過配置定義,處理邏輯是固定的。而GlobalFilter的邏輯需要自己寫代碼實現(xiàn)。

案例:定義全局過濾器,攔截并判斷用戶身份

需求:定義全局過濾器,攔截請求,判斷請求的參數(shù)是否滿足下面條件:

  • 參數(shù)中是否有authorization,
  • authorization參數(shù)值是否為admin

如果同時滿足則放行,否則攔截

創(chuàng)建AuthorizeFilter方法實現(xiàn)GlobalFilter接口:

添加@Order注解或?qū)崿F(xiàn)Ordered接口

@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {
    @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ù)值是否等于 admin
        if ("admin".equals(auth)){
            // 4.是,放行
            return chain.filter(exchange);
        }

        // 5.否,攔截
        // 5.1.設(shè)置狀態(tài)碼
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        // 5.2.攔截請求
        return exchange.getResponse().setComplete();
    }
}

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

請求進入網(wǎng)關(guān)會碰到三類過濾器:當(dāng)前路由的過濾器、DefaultFilter、GlobalFilter

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

  • 每一個過濾器都必須指定一個int類型的order值,order值越小,優(yōu)先級越高,執(zhí)行順序越靠前。
  • GlobalFilter通過實現(xiàn)Ordered接口,或者添加@Order注解來指定order值,由我們自己指定
  • 路由過濾器和defaultFilter的order由Spring指定,默認是按照聲明順序從1遞增。
  • 當(dāng)過濾器的order值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter的順序執(zhí)行。

f.網(wǎng)關(guān)的cors跨域配置

跨域問題處理

跨域:域名不一致就是跨域,主要包括:

  • 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
  • 域名相同,端口不同:localhost:8080和localhost8081

跨域問題:瀏覽器禁止請求的發(fā)起者與服務(wù)端發(fā)生跨域ajax請求,請求被瀏覽器攔截的問題

解決方案:CORS

網(wǎng)關(guān)處理跨域采用的同樣是CORS方案,并且只需要簡單配置即可實現(xiàn):文章來源地址http://www.zghlxwxcb.cn/news/detail-679539.html

spring:
  cloud:
    gateway:
      globalcors: # 全局的跨域處理
        add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允許哪些網(wǎng)站的跨域請求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: # 允許的跨域ajax的請求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允許在請求中攜帶的頭信息
            allowCredentials: true # 是否允許攜帶cookie
            maxAge: 360000 # 這次跨域檢測的有效期

到了這里,關(guān)于微服務(wù)中間件--統(tǒng)一網(wǎng)關(guān)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īng)查實,立即刪除!

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

相關(guān)文章

  • 5.微服務(wù)項目實戰(zhàn)---Gateway--服務(wù)網(wǎng)關(guān),實現(xiàn)統(tǒng)一認證、鑒權(quán)、監(jiān)控、路由轉(zhuǎn)發(fā)等

    5.微服務(wù)項目實戰(zhàn)---Gateway--服務(wù)網(wǎng)關(guān),實現(xiàn)統(tǒng)一認證、鑒權(quán)、監(jiān)控、路由轉(zhuǎn)發(fā)等

    大家都都知道在微服務(wù)架構(gòu)中,一個系統(tǒng)會被拆分為很多個微服務(wù)。那么作為客戶端要如何去調(diào)用 這么多的微服務(wù)呢?如果沒有網(wǎng)關(guān)的存在,我們只能在客戶端記錄每個微服務(wù)的地址,然后分別去調(diào)用。 ? 這樣的架構(gòu),會存在著諸多的問題: 客戶端多次請求不同的微服務(wù),

    2024年02月16日
    瀏覽(26)
  • Springcloud gateway網(wǎng)關(guān)+認證服務(wù)+token方式,入口層認證統(tǒng)一微服務(wù)鑒權(quán)【設(shè)計實踐】

    目錄 背景 實現(xiàn) gateway maven配置 yml配置 頁面登錄攔截配置類 白名單配置 token工具類 登錄配置類 全局過濾器類 項目啟動類 分布式項目的單點登錄分為認證服務(wù)(單點登錄服務(wù)端)和業(yè)務(wù)服務(wù)(單點登錄客戶端)兩個角色, 當(dāng)訪問業(yè)務(wù)服務(wù)時,認證服務(wù)客戶端SDK校驗一下是否

    2024年02月15日
    瀏覽(21)
  • SpringCloud學(xué)習(xí)(七)——統(tǒng)一網(wǎng)關(guān)Gateway

    SpringCloud學(xué)習(xí)(七)——統(tǒng)一網(wǎng)關(guān)Gateway

    到現(xiàn)在,我們可以使用Nacos對不同的微服務(wù)進行注冊并管理配置文件,也可以使用 Feign 對不同的微服務(wù)進行訪問,但是,這種訪問是任何人都可以訪問的,這是不行的,訪問之間應(yīng)該有某種權(quán)限的控制,而且,如果所有允許的訪問都可以進入,那么如果有一個時間訪問量太過

    2024年02月06日
    瀏覽(20)
  • satoken+ gateway網(wǎng)關(guān)統(tǒng)一鑒權(quán) 初版

    satoken+ gateway網(wǎng)關(guān)統(tǒng)一鑒權(quán) 初版

    本博客內(nèi)容 參考了satoken官網(wǎng)實現(xiàn),satoken官網(wǎng)地址: https://sa-token.cc/doc.html#/micro/gateway-auth jinyi-gateway 網(wǎng)關(guān)服務(wù) jinyi-user-service 用戶服務(wù) 2.1 jinyi-user-api 2.2 jinyi-user-client 2.3 jinyi-user-provider jinyi-common 通用服務(wù),定義了一些統(tǒng)一返回類,全局常量(R等) 項目層級關(guān)系截圖: 3.1jinyi-

    2023年04月20日
    瀏覽(19)
  • Spring Gateway + Oauth2 + Jwt網(wǎng)關(guān)統(tǒng)一鑒權(quán)

    Spring Gateway + Oauth2 + Jwt網(wǎng)關(guān)統(tǒng)一鑒權(quán)

    之前文章里說過,分布式系統(tǒng)的鑒權(quán)有兩種方式,一是在網(wǎng)關(guān)進行統(tǒng)一的鑒權(quán)操作,二是在各個微服務(wù)里單獨鑒權(quán)。 第二種方式比較常見,代碼網(wǎng)上也是很多。今天主要是說第一種方式。 重要前提:需要收集各個接口的uri路徑和所需權(quán)限列表的對應(yīng)關(guān)系,并存入緩存。 服務(wù)

    2024年02月03日
    瀏覽(24)
  • GateWay網(wǎng)關(guān)自定義過濾器實現(xiàn)token校驗完成統(tǒng)一鑒權(quán)

    GateWay網(wǎng)關(guān)自定義過濾器實現(xiàn)token校驗完成統(tǒng)一鑒權(quán)

    gateWay---API網(wǎng)關(guān),也可以稱為業(yè)務(wù)網(wǎng)關(guān),主要服務(wù)于微服務(wù)的; (1)? 三大組件 路由(Route) ????????構(gòu)建網(wǎng)關(guān)的基本模塊,由id(唯一標(biāo)示)、目標(biāo)URI、一組斷言、一組過濾器組成,如果斷言為true,則匹配該路由 ? 斷言(Predicate) ? ? ? ? ?可以使用它匹配來自HTTP請求的任何

    2024年02月08日
    瀏覽(23)
  • GoZero微服務(wù)個人探究之路(七)添加中間件、自定義中間件

    GoZero微服務(wù)個人探究之路(七)添加中間件、自定義中間件

    官方已經(jīng)自己實現(xiàn)了很多中間件,我們可以方便的直接使用,不用重復(fù)造輪子了 開啟方式可以看官方文檔 中間件 | go-zero Documentation 在業(yè)務(wù)邏輯中,我們需要實現(xiàn)自定義功能的中間件 ------這里我們以實現(xiàn)跨源訪問的中間件(詳情可見這篇文章flutter開發(fā)web應(yīng)用網(wǎng)絡(luò)請求后臺失

    2024年01月21日
    瀏覽(26)
  • 微服務(wù)中間件--微服務(wù)保護

    微服務(wù)中間件--微服務(wù)保護

    雪崩問題 微服務(wù)調(diào)用鏈路中的某個服務(wù)故障,引起整個鏈路中的所有微服務(wù)都不可用,這就是雪崩 解決雪崩問題的常見方式有四種: 超時處理:設(shè)定超時時間,請求超過一定時間沒有響應(yīng)就返回錯誤信息,不會無休止等待 艙壁模式:限定每個業(yè)務(wù)能使用的線程數(shù),避免耗盡

    2024年02月12日
    瀏覽(35)
  • 服務(wù)器中間件

    服務(wù)器中間件

    一、tomcat tomcat(全稱為Apache Tomcat)是一個開源的Java Web應(yīng)用服務(wù)器,它實現(xiàn)了Java Servlet、JavaServer Pages(JSP)和Java WebSocket等JavaEE規(guī)范,提供了一個運行Java Web應(yīng)用的容器。Tomcat由Apache軟件基金會開發(fā)和維護,是一個非常流行的Web應(yīng)用服務(wù)器。 Tomcat的主要特點包括: Servlet容器

    2024年02月10日
    瀏覽(31)
  • 微服務(wù)中間件--多級緩存

    微服務(wù)中間件--多級緩存

    傳統(tǒng)緩存的問題 傳統(tǒng)的緩存策略一般是請求到達Tomcat后,先查詢Redis,如果未命中則查詢數(shù)據(jù)庫,存在下面的問題: 請求要經(jīng)過Tomcat處理,Tomcat的性能成為整個系統(tǒng)的瓶頸 Redis緩存失效時,會對數(shù)據(jù)庫產(chǎn)生沖擊 多級緩存方案 多級緩存就是充分利用請求處理的每個環(huán)節(jié),分別

    2024年02月11日
    瀏覽(36)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包