Zuul Filter的小坑

2024-02-02 20:38
文章标签 zuul filter 小坑

本文主要是介绍Zuul Filter的小坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Zuul是Spring Cloud技术栈里对外网关的实现。

所有的服务从这里对外暴露,鉴权、加密、压缩、缓存等等等等,各类需求可以在这里一次编码、彻底解决,方便极了。

但是这里又是所有服务的入口,一夫当关、万夫莫开,丁点错误会被无限放大,需要慎之又慎。

昨天小踩了一下,发现了几个小坑,先记下来,待时机成熟时在一块儿总结。

1. 不要对response直接操作!!

response的输出流不是你想写就能写,想读就能读。

可以看下HttpServletResponse的各种实现,也是通过各种wrapper,通过包装器模式来感知获取流数据的,断然不是想读就读想写就写。

作为Zuul中的filter,想操作response的多了,有一个乱来的,其他人就啥都不要干了。

所以,第一军规:不要直接操作 response

写出这样的代码,你已经在犯错的边缘了:
HttpServletResponse response = RequestContext.getCurrentContext().getResponse();

正确的姿势是这样的,通过RequestContext操作:

RequestContext ctx = RequestContext.getCurrentContext();
ctx.setResponseStatusCode(RESPONSE_STATUS_CODE_304);
ctx.setResponseGZipped(true);
ctx.setResponseBody(sb.toString());

2. ZuulFilter的顺序

Zuul的设计可视化太差了,通过每个Filter的fitlerOrder返回,如下:
public int filterOrder() {
      return 0;
}
没有一个统一的地方,可以看到所有的filter的顺序,只有调试时才能知道,不人性。

正确的姿势,放在同一个Class里:

@Bean
public XxxFilter xxxFilter(){   return new XxxFilter().setPreOrder(1);   }
@Bean
public XxxFilter xxxFilter(){   return new XxxFilter().setPreOrder(2);   }

@Bean
public XxxFilter xxxFilter(){   return new XxxFilter().setPostOrder(1);   }
@Bean
public XxxFilter xxxFilter(){   return new XxxFilter().setPostOrder(2);   }
@Bean
public XxxFilter xxxFilter(){   return new XxxFilter().setPostOrder(3);   }



暂时这些。

这篇关于Zuul Filter的小坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671881

相关文章

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Zuul详细解释

Zuul 是 Netflix 开源的 API 网关,广泛用于微服务架构中。它作为系统的前置网关,主要功能包括路由、负载均衡、限流、安全性管理等。Zuul 最常见的应用场景是作为反向代理,它接收所有来自客户端的请求,并将请求转发给后端的微服务,从而屏蔽了微服务的复杂性。Spring Cloud 集成了 Zuul,使其成为 Spring Cloud 微服务生态系统中的一个重要组件。 为什么使用 Zu

Java后端微服务架构下的服务网关设计:Spring Cloud Zuul

Java后端微服务架构下的服务网关设计:Spring Cloud Zuul 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,服务网关是微服务系统与外部世界的入口点,它负责请求路由、负载均衡、认证、监控等任务。Spring Cloud Zuul是一个基于Spring Boot的网关服务,它为微服务架构提供了一种灵活、高效的网关解决方案。 服务

Hbase Filter+Scan 查询效率优化

Hbase Filter+Scan 查询效率问题 众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。 根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。 正确尝试: 1.scan 设置 开始行和结

Filter基本原理和使用

https://www.cnblogs.com/xdp-gacl/p/3948353.html 一、Filter简介   Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控

微服务之网关安全基于Zuul并实现网关限流

微服务网关安全 微服务架构下的问题 处理安全和业务逻辑耦合,增加了复杂性和变更成本 随着业务节点增加,认证服务器压力增大 多个微服务同时暴露,增加了外部访问的复杂性 通过网关处理流程 1、请求令牌。2、转发请求。3、返回令牌。4、转发令牌各客户端应用。5、携带令牌发送请求。6、校验令牌。7、返回校验结果信息。8、访问微服务。 实例 引入依赖 <dependencies><depe

在UE的内容浏览器中添加自定义的Filter

目标需求 在UE的内容浏览器中,可以使用Filter来过滤资源: 目标需求是在这之中添加一个自定义的Filter。 其代码上是非常简单的,在本文末尾。 然而我觉得找到方法的过程也是挺有意思的,因此我也记录了下来。 探索过程 1. 在哪定义? 首先,我猜测Other Filters下的各个项目,也都是通过代码添加的。因此,我调了其中一项,比如Show Redirectors,然后对代码进

Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现

什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上在网络爬虫里,一个网址是否被访问过yahoo, gmail等邮箱垃圾邮件过滤功能 这几个例子有一个共同的特点: 如何判断一个元素是否存在一个集合中? 常规思路 数组链表树、平衡二叉树、TrieMap (红黑树)哈希表 虽然上面描述的