成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Cloud Gateway核心全局過濾器

開發(fā) 前端
如果URL位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交換屬性有ws或wss方案,websocket路由過濾器運(yùn)行。它使用Spring WebSocket基礎(chǔ)設(shè)施向下游轉(zhuǎn)發(fā)WebSocket請(qǐng)求。

概述

GlobalFilter接口與GatewayFilter具有相同的簽名。這些是特殊的過濾器,有條件地應(yīng)用于所有路由。

在未來的里程碑版本中,此接口及其使用可能會(huì)發(fā)生更改。

GlobalFilter攔截式的契約,Web請(qǐng)求的鏈?zhǔn)教幚恚捎糜趯?shí)現(xiàn)橫切、應(yīng)用程序無關(guān)的需求,如Security、Timeout等。?

public interface GlobalFilter {
/** * 處理Web請(qǐng)求并(可選地)通過給定的GatewayFilterChain委托給下一個(gè)webfilter。 * @param exchange the current server exchange * @param chain provides a way to delegate to the next filter * @return {@code Mono<Void>} to indicate when request processing is complete */Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

組合全局過濾器和網(wǎng)關(guān)過濾器

當(dāng)請(qǐng)求匹配路由時(shí),過濾web處理程序?qū)lobalFilter的所有實(shí)例和GatewayFilter的所有特定路由實(shí)例添加到過濾器鏈中。這個(gè)組合過濾器鏈?zhǔn)怯蒾rg.springframework.core.Ordered接口排序的,你可以通過實(shí)現(xiàn)getOrder()方法來設(shè)置它。

由于Spring Cloud Gateway區(qū)分了過濾器邏輯執(zhí)行的“前”和“后”階段(參見它的工作原理),優(yōu)先級(jí)最高的過濾器是“前”階段的第一個(gè)過濾器,是“后”階段的最后一個(gè)過濾器。

下面的代碼清單配置了過濾器鏈:?

@Beanpublic GlobalFilter customFilter(){  return new CustomGlobalFilter();}
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){ log.info("custom global filter"); return chain.filter(exchange); }
@Overridepublic int getOrder(){ return -1; }}

Forward Routing Filter

ForwardRoutingFilter在交換屬性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中查找URI。如果URL是前向模式(例如forward:///xxxx),它會(huì)使用Spring DispatcherHandler來處理請(qǐng)求。請(qǐng)求URL中的路徑部分被前向URL中的路徑覆蓋。未修改的原始URL被附加到ServerWebExchangeUtils中的列表中ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR屬性。

負(fù)載均衡過濾器

ReactiveLoadBalancerClientFilter在名為ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange屬性中查找URI。如果URL具有l(wèi)b模式(例如lb://myservice),它會(huì)使用Spring Cloud ReactorLoadBalancer將名稱(在本例中是myservice)解析為實(shí)際的主機(jī)和端口,并替換相同屬性中的URI。未修改的原始URL被附加到ServerWebExchangeUtils中的列表中GATEWAY_ORIGINAL_REQUEST_URL_ATTR屬性。過濾器還在ServerWebExchangeUtils中查找GATEWAY_SCHEME_PREFIX_ATTR屬性,查看它是否等于lb。如果等于,則應(yīng)用相同的規(guī)則。下面的代碼清單配置了ReactiveLoadBalancerClientFilter:

spring:
cloud:
gateway:
routes:
- id: myRoute
uri: lb://service
predicates:
- Path=/service/**

默認(rèn)情況下,當(dāng)ReactorLoadBalancer找不到服務(wù)實(shí)例時(shí),會(huì)返回503。通過設(shè)置spring.cloud.gateway.loadbalancer.use404=true,可以配置網(wǎng)關(guān)返回404。

從ReactiveLoadBalancerClientFilter返回的ServiceInstance的isSecure值覆蓋了向網(wǎng)關(guān)發(fā)出的請(qǐng)求中指定的方案。例如,如果請(qǐng)求通過HTTPS進(jìn)入網(wǎng)關(guān),但ServiceInstance表明它不安全,則下游請(qǐng)求將通過HTTP發(fā)出。相反的情況也可以適用。但是,如果在網(wǎng)關(guān)配置中為路由指定了GATEWAY_SCHEME_PREFIX_ATTR,前綴將被刪除,并且從路由URL得到的方案將覆蓋ServiceInstance配置。

Netty路由過濾器

如果URL位于ServerWebExchangeUtils中,則運(yùn)行Netty路由過濾器GATEWAY_REQUEST_URL_ATTR交換屬性具有http或https方案。它使用Netty HttpClient來發(fā)出下游代理請(qǐng)求。響應(yīng)被放在ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交換屬性,稍后在過濾器中使用。(還有一個(gè)實(shí)驗(yàn)性的WebClientHttpRoutingFilter,它執(zhí)行相同的功能,但不需要Netty。)

Netty寫響應(yīng)過濾器

如果服務(wù)器ServerWebExchangeUtils中有Netty HttpClientResponse,則運(yùn)行NettyWriteResponseFilter.CLIENT_RESPONSE_ATTR交換屬性。它在所有其他過濾器完成之后運(yùn)行,并將代理響應(yīng)寫回網(wǎng)關(guān)客戶端響應(yīng)。(還有一個(gè)實(shí)驗(yàn)性的WebClientWriteResponseFilter,它可以執(zhí)行相同的功能,但不需要Netty。)

RouteToRequestUrl過濾器

如果ServerWebExchangeUtils中有路由對(duì)象。GATEWAY_ROUTE_ATTR交換屬性,運(yùn)行RouteToRequestUrlFilter。它根據(jù)請(qǐng)求的URI創(chuàng)建一個(gè)新的URI,但使用路由對(duì)象的URI屬性進(jìn)行更新。新的URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交換屬性'。

如果URI中有一個(gè)模式前綴,例如lb:ws://serviceid,則從URI中剝離lb模式,放在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR,稍后在過濾器鏈中使用。

WebSocket過濾器

如果URL位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交換屬性有ws或wss方案,websocket路由過濾器運(yùn)行。它使用Spring WebSocket基礎(chǔ)設(shè)施向下游轉(zhuǎn)發(fā)WebSocket請(qǐng)求。

你可以在URI前加上lb,例如lb:ws://serviceid,對(duì)websocket進(jìn)行負(fù)載均衡。?

spring:
cloud:
gateway:
routes:
# SockJS route
- id: websocket_sockjs_route
uri: http://localhost:3001
predicates:
- Path=/websocket/info/**
# Normal Websocket route
- id: websocket_route
uri: ws://localhost:3001
predicates:
- Path=/websocket/**

以上在Gateway中提供的幾個(gè)核心全局過濾器,任何路由都會(huì)被過濾器執(zhí)行。

責(zé)任編輯:武曉燕 來源: 實(shí)戰(zhàn)案例錦集
相關(guān)推薦

2023-04-14 09:01:25

2023-07-24 08:00:56

客戶端訪問指定

2021-01-14 08:13:39

Spring Clou應(yīng)用內(nèi)置過濾器

2017-05-04 22:30:17

Zuul過濾器微服務(wù)

2017-04-12 14:43:01

Spring ClouZuul過濾器

2024-04-03 08:08:15

謂詞網(wǎng)關(guān)開發(fā)

2023-02-15 08:12:19

http超時(shí)過濾器

2017-09-15 23:29:53

Spring Clou微服務(wù)架構(gòu)過濾器

2021-07-05 15:22:03

Servlet過濾器客戶端

2024-01-05 09:04:35

隆過濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2024-11-04 08:45:48

布隆過濾器元數(shù)據(jù)指紋值

2009-07-08 15:30:56

Servlet過濾器

2009-07-14 09:09:08

Swing模型過濾器

2009-07-08 16:07:04

Servlet過濾器配

2009-09-29 13:55:23

Hibernate設(shè)置

2011-06-29 16:14:59

Qt 事件 過濾器

2022-02-16 23:58:41

Spring過濾器驗(yàn)證碼

2025-04-21 00:50:50

2009-06-18 10:13:00

Hibernate過濾

2022-02-21 23:58:49

Spring過濾器順序值
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品a久久久久 | 四虎影视在线 | 亚洲中午字幕 | 成人免费视频观看 | 黄色大片视频 | 国产成人精品一区 | 久久亚洲天堂 | 国产精品精品 | 国产黄色麻豆视频 | 国产精品日韩欧美一区二区三区 | 亚洲视频一区在线 | 精品一区在线免费观看 | 91资源在线观看 | 色综合天天综合网国产成人网 | 亚洲天堂男人的天堂 | 中文字幕视频一区二区 | 久久精品国产精品青草 | 国产探花在线精品一区二区 | 日韩av一区二区在线观看 | www.亚洲精品 | 美女国内精品自产拍在线播放 | 色资源在线 | 一级欧美 | 成人妇女免费播放久久久 | 亚洲欧美中文日韩在线v日本 | 亚洲欧美视频一区 | 国产一区二区电影 | 国产探花在线观看视频 | 中文字幕在线一区 | 神马福利| 久久国产精品一区二区 | 国产精品96久久久久久 | 日韩欧美国产一区二区三区 | 亚洲人成免费 | 56pao在线 | 国产精品久久久久久一级毛片 | 一区二区三区四区在线 | 成人av一区| 精品久久久久久红码专区 | 日韩精品一区二区三区在线观看 | 国产精品久久久久久久久久久久 |