Netflix OSS项目Zuul充当后端服务的网关,并支持添加安全性,路由等边缘功能。 在Zuul世界中,称为Zuul过滤器的组件提供了特定的边缘功能,为基于Spring Cloud的项目编写这种过滤器非常简单。 此处提供了添加过滤器的良好参考。 在这里,我想演示两个小功能–确定过滤器是否应对请求执行操作,其次要在转发请求之前添加标头。

编写Zuul过滤器

对于Spring Cloud而言 ,编写Zuul过滤器非常容易,我们需要做的就是添加一个实现ZuulFilter的Spring bean,因此在此示例中,它看起来像这样:

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.springframework.stereotype.Service;@Service
public class PayloadTraceFilter extends ZuulFilter {private static final String HEADER="payload.trace";@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 999;}@Overridepublic boolean shouldFilter() {....   }@Overridepublic Object run() {....}
}

此实现的一些高级细节,已将其标记为“ pre”的“过滤器类型”,这意味着将在将请求分派到后端服务之前调用此过滤器,filterOrder确定何时在服务器中调用此特定过滤器过滤器链,过滤器应确定是否为此请求完全调用此过滤器,并且运行包含过滤器的逻辑。

因此,就我的第一个考虑而言,此过滤器是否应完全作用于流-可以在逐个请求的基础上完成,我的逻辑很简单-如果请求uri以/ samplesvc开头,则此过滤器应对请求起作用。

@Override
public boolean shouldFilter() {RequestContext ctx = RequestContext.getCurrentContext();String requestUri = ctx.getRequest().getRequestURI();return requestUri.startsWith("/samplesvc");
}

关于修改后端服务的请求标头的第二个注意事项:

@Override
public Object run() {RequestContext ctx = RequestContext.getCurrentContext();ctx.addZuulRequestHeader("payload.trace", "true");return null;
}

获得此类请求的支持服务可以查找标头并采取相应的措施,例如,在这种特定情况下,请查看“ payload.trace”标头并决定记录传入的消息:

@RequestMapping(value = "/message", method = RequestMethod.POST)
public Resource<MessageAcknowledgement> pongMessage(@RequestBody Message input, @RequestHeader("payload.trace") boolean tracePayload) {if (tracePayload) {LOGGER.info("Received Payload: {}", input.getPayload());}
....

结论

如此处所示,Spring Cloud确实很容易为任何边缘需求添加Zuul过滤器。 如果您想进一步探索此样本,我可以在
我的github仓库 。

翻译自: https://www.javacodegeeks.com/2016/07/spring-cloud-zuul-writing-filter.html

Spring Cloud Zuul –编写过滤器相关推荐

  1. 网关 Spring Cloud Zuul 自定义过滤器认证转换 Token

    整理思路 由网关Zuul进行Token颁布 由网关Zuul进行登录认证拦截 拦截的配置等可以用Mysql存储配置或者配置文件,只配置默认放开的路径即可 拦截后把在zuul中的token,换成跟后台用户 ...

  2. 13 网关组件Spring Cloud Zuul自定义前置和后置过滤器

    在Spring Cloud Zuul组件中,一共有四种类型的过滤器:Pre前置过滤器.Post后置过滤器.Route路由过滤器.Error错误过滤器.通过自定义前置过滤器.后置过滤器,可以实现对请求的 ...

  3. Spring Cloud Zuul中使用Swagger汇总API接口文档

    有很多读者问过这样的一个问题: 虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档 ...

  4. Spring Cloud -Zuul

    服务网关和zuul 一个角色来充当request的请求入口,处理非业务功能的场所(防刷,协议监控) 要素: 稳定性,高可用 性能.并发性 安全性 扩展性 常用的网关方案 Nginx+Lua(性能极高, ...

  5. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  6. 关于Spring Cloud Zuul网管上传文件乱码问题

    Spring Cloud Zuul现在对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet.spring mvc对文件处理不是很好,会导致乱码问题,zuulServ ...

  7. Spring Cloud Gateway(过滤器)

    在上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由.本篇我们将关注它的另一个功能:过滤器. Spring Cloud Gateway 已经内置了很多实 ...

  8. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  9. Spring Cloud Zuul中使用Swagger汇总API接口文档 1

    有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中 ...

最新文章

  1. 8天学通MongoDB——第三天 细说高级操作
  2. 【深度学习入门到精通系列】CIFAR-10数据集说明
  3. 10、Power Map—自定义地图背景
  4. 重装系统 计算机意外遇到错误无法运行,win7系统重装笔记本提示"计算机意外的重新启动或遇到错误"的解决方法...
  5. PHP面向对象(三)
  6. 并联机器人市场呈现快速增长之势
  7. Docker工具箱继续增加
  8. python“-o”命令更改存储位置_程序员的狂欢地一般人的超大存储免费空间和网站空间你要会用用...
  9. 关于excel表的生成
  10. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注
  11. Erlang --- gen_server
  12. 简单介绍Spring是什么?
  13. LINUX虚拟机安装增强功能
  14. 常用设计模式——抽象工厂模式
  15. 通讯录管理系统(C语言版)
  16. Spark 小文件合并优化实践
  17. 已解决:[emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forb
  18. 用C语言基础及数学公式来简单实现土味表白
  19. 推荐七个略火的 SpringBoot+Vue 项目
  20. 华为gt3智能跑步计划体验:心率监测、gps轨迹、训练计划

热门文章

  1. 子类可以继承到父类上的注解吗
  2. 什么是CAS机制?(进阶篇)
  3. C++描述杭电OJ 2015.偶数求和 ||
  4. 《四世同堂》金句摘抄(九)
  5. 使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
  6. java通过commons-fileupload实现多张图片的上传(servlet)
  7. 2017蓝桥杯省赛---java---A---1(迷宫)
  8. DFS VS BFS
  9. Android 对话框,确定取消
  10. 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...