全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入解析Spring Cloud内置的Zuul过滤器

前言

Spring Cloud默认为Zuul编写并启用了一些过滤器,这些过滤器有什么作用呢?我们不妨按照@EnableZuulServer、@EnableZuulProxy两个注解进行展开,相信大家对这两个注解都不陌生(至少都见过吧)。如果觉得陌生也没有关系,可将@EnableZuulProxy简单理解为@EnableZuulServer的增强版。事实上,当Zuul与Eureka、Ribbon等组件配合使用时,

@EnableZuulProxy是我们常用的注解。

在Spring Cloud的官方文档中,只说@EnableZuulServer是一个“空白”的Zuul,那么究竟空白在什么地方呢?与@EnableZuulProxy到底有什么区别呢?诸多问题,都将在本文找到答案。

在此之前,我们先理解什么是RequestContext:

RequestContext:用于在过滤器之间传递消息。它的数据保存在每个请求的ThreadLocal中。它用于存储请求路由到哪里、错误、HttpServletRequest、HttpServletResponse都存储在RequestContext中。RequestContext扩展了ConcurrentHashMap,所以,任何数据都可以存储在上下文中。

@EnableZuulServer过滤器

一、pre类型过滤器

(1) ServletDetectionFilter:该过滤器用于检查请求是否通过Spring Dispatcher。检查后,通过isDispatcherServletRequest设置布尔值。

(2) FormBodyWrapperFilter:解析表单数据,并为请求重新编码。

(3) DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true ,或在请求时,加上debug=true的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true 开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting() RequestContext.setDebugRequest() 设为true。

二、route类型过滤器

SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get("forward.to") 中。可以将路由设置成:

zuul:
 routes:
 abc: 
  path: /abc/**
  url: forward:/abc

然后访问$ZUUL_HOST:ZUUL_PORT/abc ,观察该过滤器的执行过程。

三、post类型过滤器

SendResponseFilter:将Zuul所代理的微服务的的响应写入当前响应。

四、error类型过滤器

SendErrorFilter:如果RequestContext.getThrowable() 不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径。

@EnableZuulProxy过滤器

如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会安装以下过滤器:

一、pre类型过滤器

PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。

二、route类型过滤器

(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId") 中。该过滤器可使用不同的HTTP客户端,例如

  1. Apache HttpClient:默认的HTTP客户端
  2. Squareup OkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true
  3. Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true 即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。

(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost() 中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# spring  # zuul  # 过滤器  # cloud  # spring cloud zuul增加header传输的操作  # spring cloud gateway全局过滤器实现向request header中放数据  # springboot webflux 过滤器(使用RouterFunction实  # SpringCloud Webflux过滤器增加header传递方式  # 客户端  # 的是  # 是一个  # 有什么  # 就会  # 都不  # 也没  # 将在  # 在此  # 还会  # 见过  # 设为  # 有一定  # 这两个  # 可以通过  # 不支持  # 不为  # 什么地方  # 顾名思义  # 会把 


相关文章: 企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  常州企业网站制作公司,全国继续教育网怎么登录?  Swift开发中switch语句值绑定模式  如何构建满足综合性能需求的优质建站方案?  香港服务器选型指南:免备案配置与高效建站方案解析  焦点电影公司作品,电影焦点结局是什么?  无锡营销型网站制作公司,无锡网选车牌流程?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  沈阳制作网站公司排名,沈阳装饰协会官方网站?  Android使用GridView实现日历的简单功能  如何快速搭建高效WAP手机网站吸引移动用户?  如何选择高效响应式自助建站源码系统?  如何快速搭建安全的FTP站点?  C++如何编写函数模板?(泛型编程入门)  兔展官网 在线制作,怎样制作微信请帖?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站主机助手选型指南:2025年热门推荐与高效部署技巧  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  高防服务器租用如何选择配置与防御等级?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站主机数据库如何配置才能提升网站性能?  北京网站制作公司哪家好一点,北京租房网站有哪些?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何选择域名并搭建高效网站?  建站之星代理商如何保障技术支持与售后服务?  实例解析angularjs的filter过滤器  北京专业网站制作设计师招聘,北京白云观官方网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站为何优先选择香港服务器?  如何通过主机屋免费建站教程十分钟搭建网站?  浅析上传头像示例及其注意事项  实例解析Array和String方法  如何快速搭建高效可靠的建站解决方案?  如何用IIS7快速搭建并优化网站站点?  简历在线制作网站免费版,如何创建个人简历?  动图在线制作网站有哪些,滑动动图图集怎么做?  建站之星代理如何获取技术支持?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  济南网站制作的价格,历城一职专官方网站?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  如何确认建站备案号应放置的具体位置?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  制作网站的软件免费下载,免费制作app哪个平台好?  C++中引用和指针有什么区别?(代码说明)  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  如何用景安虚拟主机手机版绑定域名建站?  如何使用Golang安装API文档生成工具_快速生成接口文档  香港服务器如何优化才能显著提升网站加载速度?  如何在Windows虚拟主机上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。