SpringCloudGateway源码解析:RemoveCachedBodyFilter
发布日期:2021-06-30 21:31:32 浏览次数:2 分类:技术文章

本文共 1373 字,大约阅读时间需要 4 分钟。

 

package org.springframework.cloud.gateway.filter;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import reactor.core.publisher.Mono;import org.springframework.core.Ordered;import org.springframework.core.io.buffer.PooledDataBuffer;import org.springframework.web.server.ServerWebExchange;import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR;/** * 移除请求上下文中的body缓存信息 * 只有在使用了ReadBodyPredicateFactory相关处理是会有body缓存 * @version 2.2.5 */public class RemoveCachedBodyFilter implements GlobalFilter, Ordered {	private static final Log log = LogFactory.getLog(RemoveCachedBodyFilter.class);	@Override	public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) { //mono处理完成后执行方法 return chain.filter(exchange).doFinally(s -> { //移除上下文中的的cachedRequestBody信息 Object attribute = exchange.getAttributes().remove(CACHED_REQUEST_BODY_ATTR); //如果body信息不空,则释放数据缓存 if (attribute != null && attribute instanceof PooledDataBuffer) { PooledDataBuffer dataBuffer = (PooledDataBuffer) attribute; if (dataBuffer.isAllocated()) { if (log.isTraceEnabled()) { log.trace("releasing cached body in exchange attribute"); } dataBuffer.release(); } } }); } /** * 将该过滤器设置为最高优先级,优先加载 * @return */ @Override public int getOrder() { return HIGHEST_PRECEDENCE; }}

 

转载地址:https://lizz6.blog.csdn.net/article/details/109747500 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Rxjava学习:onNext、onComplete、doOnNext、doFinally、doAfterTerminate执行顺序
下一篇:netty之ConnectionProvider类型elastic和fixed区别

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月27日 05时18分26秒