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

【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway

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

8.1 網(wǎng)關(guān)作用介紹

【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
網(wǎng)關(guān)功能:

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

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

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

總結(jié)

網(wǎng)關(guān)的作用

  • 對用戶請求做身份認(rèn)證、權(quán)限驗(yàn)證
  • 將用戶請求路由到微服務(wù),并實(shí)現(xiàn)負(fù)載均衡
  • 對用戶請求做限流

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

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

  1. 創(chuàng)建新的module,引入SpringCloudGateway的依賴和nacos的發(fā)現(xiàn)服務(wù)依賴
<!--網(wǎng)關(guān)依賴-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服務(wù)發(fā)現(xiàn)依賴-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 編寫路由配置及nacos地址
server:
	port: 10010 # 網(wǎng)關(guān)端口
spring:
	application:
		name: gateway  # 服務(wù)名稱
	cloud:
    	nacos:
    		server-addr: localhost:8848  # nacos地址
    	gateway:
        	routes:  # 網(wǎng)關(guān)路由配置
        	 	- id: user-service # 路由id,自定義,只要唯一即可
        			# uri: http://127.0.0.1:8081  #路由的目標(biāo)地址,http就是固定地址
        			uri: lb://userservice  # 路由的目標(biāo)地址 lb就是負(fù)載均衡,后面跟服務(wù)名稱
        			predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
        				- Path=/user/**  # 這個是按照路徑匹配,只要以/user/開頭就符合要求
        		-id: order-service
        			uri: lb://orderservice
        			predicates:
        				- Path=/order/**

“-”代表集合,會有很多個
配置完之后,訪問localhost:10010/order/…就可以訪問到訂單服務(wù) 換成user就可以訪問到用戶服務(wù)

路由過程:
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway

總結(jié)

網(wǎng)關(guān)搭建步驟:

  1. 創(chuàng)建項目,引入nacos服務(wù)發(fā)現(xiàn)和gateway依賴
  2. 配置application.yaml,包括服務(wù)基本信息、nacos地址、路由

路由配置包括:

  1. 路由id:路由的唯一標(biāo)示
  2. 路由目標(biāo)(uri):路由的目標(biāo)地址,http代表固定地址,lb代表根據(jù)服務(wù)名負(fù)載均衡
  3. 路由斷言(predicates):判斷請求是否符合要求,符合則轉(zhuǎn)發(fā)到路由目的地
  4. 路由過濾器(filter):對請求或響應(yīng)做處理

8.3 路由斷言工廠 Route Predicate Factory

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

Spring提供了11種基本的Predicate工廠:

【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
可以在官方文檔查看使用方式

總結(jié)

PredicateFactory的作用是什么?
讀取用戶定義的斷言條件,對請求做出判斷

Path=/user/**是什么含義?
路徑是以/user開頭的就認(rèn)為是符合的

8.4 路由的過濾器配置

路由過濾器 GatewayFilter
GatewayFilter是網(wǎng)關(guān)中提供的一種過濾器,可以對進(jìn)入網(wǎng)關(guān)的請求和微服務(wù)返回的響應(yīng)做處理:
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
過濾器工廠GatewayFilterFactory
Spring提供了31種不同的路由過濾器工廠。例如:
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
案例:給所有進(jìn)入userservice的請求添加一個請求頭

給所有進(jìn)入userservice的請求添加一個請求頭:Truth=itcast is freaking awesome!

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

spring:
	cloud:
		gateway:
			routes: # 網(wǎng)關(guān)路由配置
				- id: user-service
					uri: lb://userservice
					predicates:
						- Path=/user/**
					filters: #過濾器
                    	-AddRequstHeader=Truth, Itcast is freaking awesome! #添加請求頭

,逗號前代表key,逗號后代表value

如何查看添加請求頭是否生效:在userservice的接口上添加參數(shù),調(diào)用接口查看日志
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
默認(rèn)過濾器:

如果要對所有的路由都生效,則可以將過濾器工廠寫到default下。格式如下:
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway

總結(jié)

過濾器的作用是什么?

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

defaultFilters的作用是什么?
對所有路由都生效的過濾器

8.5 ### 全局過濾器 GlobalFilter

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

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

定義方式是實(shí)現(xiàn)GlobalFilter接口

public interface GlobalFiter {
    /**
    * 處理當(dāng)前請求,有必要的話通過{@link GatewayFilterChain}將請求交給下一個過濾器處理
    
    exchange 請求上下文,里面可以獲取Request、Response等信息
    chain  用來把請求委托給下一個過濾器
    
    {@code Momo<Void>} 返回標(biāo)示當(dāng)前過濾器業(yè)務(wù)結(jié)束
    **/
    Momo<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

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

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

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

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

實(shí)現(xiàn):

@Order(-1)   // 實(shí)現(xiàn)順序方法二
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered{
    @Override
     Momo<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){
         // 1. 獲取請求參數(shù)
         ServerHttpRequest request = exchange.getRequest();
         MultiValueMap<String, String> params = request.getQueryParams();
         // 2. 獲取參數(shù)中的 authorization參數(shù)
         Spring 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();
     }
    
    // 添加順序方法一:Ordered  實(shí)現(xiàn)ordered
    public int getOrder(){
        return -1;  // -1優(yōu)先級高   優(yōu)先級從小到大,數(shù)字越小越優(yōu)先
    }

}

總結(jié):

全局過濾器的作用是什么?

對所有路由都生效的過濾器,并且可以自定義處理邏輯

實(shí)現(xiàn)全局過濾器的步驟?

  • 實(shí)現(xiàn)GlobalFilter接口
  • 添加@Order注解或?qū)崿F(xiàn)Orderd接口
  • 編寫處理邏輯

8.6 過濾器鏈執(zhí)行順序

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

請求路由后,會將當(dāng)前路由過濾器和DefaultFilter、GlobalFilter,合并到一個過濾器鏈(集合中),排序后依次執(zhí)行每個過濾器
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway
【微服務(wù)】八. 統(tǒng)一網(wǎng)關(guān)gateway,微服務(wù),微服務(wù),gateway

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

可以參考下面幾個類的源碼來查看:

org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加載defaultFilters,然后再加載某個route的filters,然后合并。

org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法會加載全局過濾器,與前面的過濾器合并后根據(jù)order排序,組織過濾器鏈
    

總結(jié)

路由過濾器、defaultFilter、全局過濾器的執(zhí)行順序?

order值越小,優(yōu)先級越高

當(dāng)order值一樣時,順序是defaultFilter最先,然后是局部的路由過濾器,最后是全局過濾器

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

跨越問題處理

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

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

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

解決方案:CORS
網(wǎng)關(guān)處理跨域采用的同樣是CORS方案,并且只需要簡單配置即可實(shí)現(xiàn):

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

有效期范圍內(nèi)瀏覽器將不再發(fā)送請求,而是直接通過

總結(jié)

CORS跨域要配置的參數(shù)包括哪幾個?文章來源地址http://www.zghlxwxcb.cn/news/detail-727464.html

  • 允許哪些域名跨域
  • 允許哪些請求頭
  • 允許哪些請求方式
  • 是否允許使用cookie
  • 有效期是多久

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

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

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包