当前位置: 首页 > news >正文

asp企业营销型网站建设网络推广怎么样

asp企业营销型网站建设,网络推广怎么样,网站添加地图导航,wordpress主题设置SpringCloud Gateway 网关的请求体body的读取和修改 getway需要多次对body 进行操作,需要对body 进行缓存 缓存body 动态多次获取 新建顶层filter,对body 进行缓存 import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filt…

SpringCloud Gateway 网关的请求体body的读取和修改

getway需要多次对body 进行操作,需要对body 进行缓存

缓存body 动态多次获取

新建顶层filter,对body 进行缓存


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.core.io.buffer.DefaultDataBuffer;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.codec.HttpMessageReader;
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;import java.util.List;/*** @author: zhoumo* @descriptions:*/
@Component
@Slf4j
public class RequestParamGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {/*** save request path and serviceId into gateway context*/ServerHttpRequest request = exchange.getRequest();HttpHeaders headers = request.getHeaders();// 处理参数MediaType contentType = headers.getContentType();long contentLength = headers.getContentLength();if (contentLength > 0) {return readBody(exchange, chain);}return chain.filter(exchange);}/*** default HttpMessageReader*/private static final List<HttpMessageReader<?>> messageReaders = HandlerStrategies.withDefaults().messageReaders();/*** ReadJsonBody** @param exchange* @param chain* @return*/private Mono<Void> readBody(ServerWebExchange exchange, GatewayFilterChain chain) {/*** join the body*/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);});/*** repackage ServerHttpRequest*/ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {@Overridepublic Flux<DataBuffer> getBody() {return cachedFlux;}};/*** mutate exchage with new ServerHttpRequest*/ServerWebExchange mutatedExchange = exchange.mutate().request(mutatedRequest).build();/*** read body string with default messageReaders*/return ServerRequest.create(mutatedExchange, messageReaders).bodyToMono(String.class).doOnNext(objectValue -> {log.debug("[GatewayContext]Read JsonBody:{}", objectValue);}).then(chain.filter(mutatedExchange));});}@Overridepublic int getOrder() {return HIGHEST_PRECEDENCE;}
}

在子节点层获取body

AtomicReference<String> requestBody = new AtomicReference<>("");RecorderServerHttpRequestDecorator requestDecorator = new RecorderServerHttpRequestDecorator(request);Flux<DataBuffer> body = requestDecorator.getBody();body.subscribe(buffer -> {CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer());requestBody.set(charBuffer.toString());});String body= requestBody.get();

重写获取body方法

   public class RecorderServerHttpRequestDecorator  extends ServerHttpRequestDecorator {private final List<DataBuffer> dataBuffers = new ArrayList<>();public RecorderServerHttpRequestDecorator(ServerHttpRequest delegate) {super(delegate);super.getBody().map(dataBuffer -> {dataBuffers.add(dataBuffer);return dataBuffer;}).subscribe();}@Overridepublic Flux<DataBuffer> getBody() {return copy();}private Flux<DataBuffer> copy() {return Flux.fromIterable(dataBuffers).map(buf -> buf.factory().wrap(buf.asByteBuffer()));}}

对body 进行修改重新封装

                String str=""+encodedDecryptedParam;DataBuffer bodyDataBuffer = stringBuffer(str);Flux<DataBuffer> bodyFlux = Flux.just(bodyDataBuffer);MediaType contentType = request.getHeaders().getContentType();ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {@Overridepublic HttpHeaders getHeaders() {HttpHeaders httpHeaders = new HttpHeaders();int length = str.getBytes().length;httpHeaders.putAll(super.getHeaders());httpHeaders.remove(HttpHeaders.CONTENT_TYPE);httpHeaders.remove(HttpHeaders.CONTENT_LENGTH);httpHeaders.setContentLength(length);httpHeaders.set(HttpHeaders.CONTENT_TYPE, contentType.toString());// 设置CONTENT_TYPEreturn httpHeaders;}@Overridepublic Flux<DataBuffer> getBody() {return bodyFlux;}};return chain.filter(exchange.mutate().request(mutatedRequest).build());
    protected DataBuffer stringBuffer(String value) {byte[] bytes = value.getBytes(StandardCharsets.UTF_8);NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT);DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length);buffer.write(bytes);return buffer;}

一定必须加上 public HttpHeaders getHeaders()对header 重新封装,否则接口层会卡死,request 无限大

http://www.tj-hxxt.cn/news/61703.html

相关文章:

  • wordpress 婚礼主题百度seo优化推广
  • 泉州网站制作注册自己的网站
  • 铜仁市建设局网站企业网站建设多少钱
  • 做美女图片网站需要备案吗长沙seo网络优化
  • 哪个网站做二微码好省推广100种方法
  • 做网站都有备案吗东莞外贸推广公司
  • 电子商务网站建设与管理考试例题正规的教育机构有哪些
  • 网站建设 实训免费推广的途径与原因
  • 海珠区建网站公司新东方考研班收费价格表
  • dw是做网站怎么给表格影藏长沙seo服务哪个公司好
  • 网站建设实训感想能打开各种网站的搜索引擎
  • 信用门户网站建设规范爱站网长尾词挖掘
  • 网站建设公司保定市太原关键词优化报价
  • 网站建设完成优化大师win10
  • 深圳有做网站公司2021年中国关键词
  • 广州购物网站开发怎么进行网络推广
  • 做医疗设备的网站线下推广方式都有哪些
  • 哪些网站微信支付平台广东省疫情最新
  • asp动态网站开发考试想做电商应该怎么入门
  • 武汉做网站公司排名seo优化公司如何做
  • 我自己的网站怎么做关键词优化网站开发从入门到实战
  • 徐州建站360网站推广
  • 聊城阳谷网站建设怎样做一个自己的网站
  • 怎么做网站的投票平台刷粉网站推广快点
  • 网站做中文和英文切换windows7优化大师下载
  • 营口做网站宁波网络营销策划公司
  • 珠海建设工程交易中心网站郑州百度推广公司
  • 旅行网站建设方案策划书域名网
  • 阿里巴巴的网站怎么做的株洲专业seo优化
  • 做网站深圳系统优化软件推荐