日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請求的操作

瀏覽:98日期:2023-07-30 11:46:27

廢話

這幾天換了新工作,需要重新開發(fā)一套系統(tǒng),技術(shù)選用Spring Cloud。在對接終端接口的時候要做驗簽,就涉及到在網(wǎng)關(guān)做攔截器,然后取出BODY里面的數(shù)據(jù)。

網(wǎng)上找了幾個方法,有的拿不到數(shù)據(jù),有的拿到數(shù)據(jù)之后不支持GET請求了。沒有一個合理的解決辦法,最后想到在動態(tài)路由構(gòu)建的時候可以指定METHOD,于是有了如下解決辦法

解決

@Bean public RouteLocator vmRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route(r -> r.method(HttpMethod.POST).and() .readBody(Object.class, requestBody -> { //相當(dāng)于緩存了body信息,在filter 中可以這么獲取 exchange.getAttribute('cachedRequestBodyObject'); log.info('requestBody is {}', requestBody); return true; }) .and().path('/terminal/**') .filters(f -> f.filter(terminalSignFilter())) .uri('lb://TERMINAL-SERVICE') .order(0) .id('terminal-service')).route(r -> r.method(HttpMethod.GET).and() .path('/terminal/**') .filters(f -> f.filter(terminalSignFilter())) .uri('lb://TERMINAL-SERVICE') .order(1) .id('terminal-service')).build(); }

關(guān)鍵代碼:

r.method(HttpMethod.POST)

r.method(HttpMethod.GET)

分別指定了不同請求METHOD對應(yīng)的路由策略

在POST請求中需要緩存BODY信息,在Filter中便可以獲取到

GET請求因為沒有BODY,所以如果不指定GET的路由便會報錯

可能會有更通用的方法,但是目前只想到這么多,以后有好的解決辦法會繼續(xù)更新

補充知識:Spring Cloud Gateway 2.x 獲取body中的數(shù)據(jù)并緩存在請求中

場景

因為http請求中的body,讀取過一次后就無法重新再讀,但是我們希望網(wǎng)關(guān)項目中可以在所有filter中共享body中的內(nèi)容。

寫法

import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.core.Ordered;import org.springframework.core.io.buffer.DataBuffer;import org.springframework.core.io.buffer.DataBufferUtils;import org.springframework.http.server.reactive.ServerHttpRequest;import org.springframework.http.server.reactive.ServerHttpRequestDecorator;import org.springframework.stereotype.Component;import org.springframework.web.reactive.function.server.HandlerStrategies;import org.springframework.web.reactive.function.server.ServerRequest;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Flux;import reactor.core.publisher.Mono;@Component@Slf4jpublic class CacheBodyParamsFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (ParamsUtil.logBody(exchange)) { return DataBufferUtils.join(exchange.getRequest().getBody()) .flatMap(dataBuffer -> { byte[] bytes = new byte[dataBuffer.readableByteCount()]; dataBuffer.read(bytes); DataBufferUtils.release(dataBuffer); Flux<DataBuffer> cachedFlux = Flux.defer(() -> { DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes); DataBufferUtils.retain(buffer); return Mono.just(buffer); }); ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) { @Override public Flux<DataBuffer> getBody() {return cachedFlux; } }; ServerWebExchange mutatedExchange = exchange.mutate().request(mutatedRequest).build(); return ServerRequest.create(mutatedExchange, HandlerStrategies.withDefaults().messageReaders()).bodyToMono(String.class).doOnNext(objectValue -> { //在此處,將body中的params值獲取到,并存放在本次請求的attributes屬性中,這樣就可以在本次請求中的所有地方進行使用了mutatedExchange.getAttributes().put(CommonConstant.PARAMS, ParamsUtil.buildParams(mutatedRequest,objectValue)); }).then(chain.filter(mutatedExchange)); }); } return chain.filter(exchange); } @Override public int getOrder() { return Ordered.HIGHEST_PRECEDENCE; }}

以上這篇解決Spring Cloud Gateway獲取body內(nèi)容,不影響GET請求的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品对白久久久久粗| 国产 日韩 欧美一区| 好吊一区二区三区| 欧美日韩视频免费观看| 久久精品亚洲欧美日韩精品中文字幕| 国产一区2区| 日本午夜大片a在线观看| 成人亚洲一区二区| 日韩大片在线| 国内自拍视频一区二区三区| 精品美女久久| 日韩在线第七页| 欧美日韩水蜜桃| 日韩一区二区久久| 亚洲精品黄色| 欧美久久一区二区三区| 国产精品亚洲一区二区在线观看| 国产麻豆精品久久| 麻豆国产精品| 日本午夜大片a在线观看| 在线日韩欧美| 玖玖精品视频| 88久久精品| 高清精品久久| 午夜国产精品视频| 欧美在线综合| 国产精品亚洲一区二区在线观看| 国产高潮在线| 在线亚洲观看| 久久精品99国产精品日本| 久久亚洲道色| 欧美影院三区| 亚州国产精品| 精品视频自拍| 99久久99视频只有精品| 久久亚洲电影| 国产精品一区二区99| 亚洲成人不卡| 亚洲精品高潮| 六月婷婷综合| 伊人久久大香线蕉av超碰演员| 亚洲制服欧美另类| 久久一区精品| 夜夜嗨av一区二区三区网站四季av| 亚洲精品综合| 久久精品国产99国产精品| 欧美成人亚洲| 欧美日韩一区二区三区在线电影| 国产精选在线| 蜜臀久久99精品久久久久久9| 国产精品久久久久久av公交车| 欧美日韩视频网站| 午夜视频一区二区在线观看| 91欧美日韩| 亚洲人成网站在线在线观看| 久久精品国产99国产| 亚洲一卡久久| 国产 日韩 欧美 综合 一区| 模特精品在线| 国产一区二区三区探花| 亚洲欧美视频| 精品国产乱码久久久| 视频在线观看一区二区三区| 久久中文字幕导航| 亚洲专区一区| 国产一区二区三区免费在线| 蜜臀久久99精品久久久久久9 | 午夜欧美精品久久久久久久| 国产精品一区二区精品视频观看| 欧美在线网站| 国产一区二区三区不卡视频网站| 日韩精品一二区| 黄色aa久久| 日韩高清中文字幕一区| 极品日韩av| 精品三区视频| 中文字幕一区二区av| 欧美sm一区| 国产精品亚洲欧美日韩一区在线 | 石原莉奈一区二区三区在线观看| 久久精品国产99国产精品| 男人的天堂亚洲一区| 国产成人精品亚洲日本在线观看| 欧美精品国产一区| 水蜜桃久久夜色精品一区的特点| 91精品韩国| 国产精品手机在线播放| 麻豆精品91| 欧美日韩中文一区二区| 精品一区视频| 日本欧美一区二区| 免费高潮视频95在线观看网站| 国产精品久久久久9999高清| 日韩欧美激情电影| 国产视频一区在线观看一区免费| а√在线中文在线新版| 欧美a级一区二区| 日韩高清不卡一区二区| 蜜桃视频一区二区三区在线观看| 免费不卡中文字幕在线| 天堂8中文在线最新版在线| 久久尤物视频| 久久国产人妖系列| 亚洲精品欧美| 视频一区二区不卡| 99国产精品视频免费观看一公开 | 欧美一区=区三区| 美女国产精品| 亚洲免费黄色| 免费国产自久久久久三四区久久| 少妇久久久久| 日韩精品欧美| 人人香蕉久久| 青青青免费在线视频| 精品久久久亚洲| 老鸭窝一区二区久久精品| 日韩高清一区| 日韩一区二区三区免费视频| 亚洲福利一区| 亚洲欧美一区在线| 免费视频一区三区| 国产综合亚洲精品一区二| 99久久久久| 欧美成人精品| 五月精品视频| 在线综合亚洲| 亚洲欧美日韩精品一区二区| 久久福利精品| 免费观看久久久4p| 日韩高清不卡在线| 国产精品久久免费视频| 另类小说一区二区三区| 久久三级中文| 久久亚洲精精品中文字幕| 久久中文欧美| 日韩欧美二区| 国产韩日影视精品| 亚洲一区二区三区免费在线观看| 蜜臀久久久久久久| 日韩精品社区| 国产激情欧美| 97se综合| 欧美日韩国产探花| 亚洲制服一区| 国产伦理一区| 日本不良网站在线观看| 免费视频一区三区| 蜜桃一区二区三区在线观看| 亚洲日产av中文字幕| 欧美日一区二区三区在线观看国产免| 麻豆精品视频在线观看免费| 欧美日韩视频免费观看| 久久av一区二区三区| 欧美久久一区二区三区| 黄色在线观看www| 欧美精品一二| 日本不卡视频在线观看 | 911精品国产| 国产成人黄色| 欧美日韩高清| 日韩欧美久久| 国产精品成久久久久| 成人羞羞视频在线看网址| 国产模特精品视频久久久久| 欧美日韩1区2区3区| 福利在线免费视频| 亚洲欧美久久久| 国产极品一区| 蜜臀91精品国产高清在线观看| 亚洲精品一级二级三级| 风间由美中文字幕在线看视频国产欧美| 天堂av在线| 综合亚洲色图| 精品国产99| 国产亚洲网站| 国产精品一区二区精品| 91精品在线观看国产| 亚洲影院天堂中文av色| 成人国产精品一区二区网站| 国产高清久久| 国产精品v一区二区三区| 激情欧美一区| 国产欧美午夜| 香蕉精品视频在线观看| 91精品麻豆| 在线成人动漫av| 欧美精品国产白浆久久久久| 色综合www| 国产欧美69| 欧美大黑bbbbbbbbb在线| 国产精品毛片视频| 五月天久久久| 国产精品久久777777毛茸茸| 欧美日韩日本国产亚洲在线| 欧美日韩黄网站| 在线精品视频在线观看高清| 久久99影视| 久久福利毛片| 九九精品调教| 国产精品17p|