Spring Cloud Zuul –编写过滤器
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 –编写过滤器相关推荐
- 网关 Spring Cloud Zuul 自定义过滤器认证转换 Token
整理思路 由网关Zuul进行Token颁布 由网关Zuul进行登录认证拦截 拦截的配置等可以用Mysql存储配置或者配置文件,只配置默认放开的路径即可 拦截后把在zuul中的token,换成跟后台用户 ...
- 13 网关组件Spring Cloud Zuul自定义前置和后置过滤器
在Spring Cloud Zuul组件中,一共有四种类型的过滤器:Pre前置过滤器.Post后置过滤器.Route路由过滤器.Error错误过滤器.通过自定义前置过滤器.后置过滤器,可以实现对请求的 ...
- Spring Cloud Zuul中使用Swagger汇总API接口文档
有很多读者问过这样的一个问题: 虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档 ...
- Spring Cloud -Zuul
服务网关和zuul 一个角色来充当request的请求入口,处理非业务功能的场所(防刷,协议监控) 要素: 稳定性,高可用 性能.并发性 安全性 扩展性 常用的网关方案 Nginx+Lua(性能极高, ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
- 关于Spring Cloud Zuul网管上传文件乱码问题
Spring Cloud Zuul现在对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet.spring mvc对文件处理不是很好,会导致乱码问题,zuulServ ...
- Spring Cloud Gateway(过滤器)
在上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由.本篇我们将关注它的另一个功能:过滤器. Spring Cloud Gateway 已经内置了很多实 ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
- Spring Cloud Zuul中使用Swagger汇总API接口文档 1
有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中 ...
最新文章
- 8天学通MongoDB——第三天 细说高级操作
- 【深度学习入门到精通系列】CIFAR-10数据集说明
- 10、Power Map—自定义地图背景
- 重装系统 计算机意外遇到错误无法运行,win7系统重装笔记本提示"计算机意外的重新启动或遇到错误"的解决方法...
- PHP面向对象(三)
- 并联机器人市场呈现快速增长之势
- Docker工具箱继续增加
- python“-o”命令更改存储位置_程序员的狂欢地一般人的超大存储免费空间和网站空间你要会用用...
- 关于excel表的生成
- SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注
- Erlang --- gen_server
- 简单介绍Spring是什么?
- LINUX虚拟机安装增强功能
- 常用设计模式——抽象工厂模式
- 通讯录管理系统(C语言版)
- Spark 小文件合并优化实践
- 已解决:[emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forb
- 用C语言基础及数学公式来简单实现土味表白
- 推荐七个略火的 SpringBoot+Vue 项目
- 华为gt3智能跑步计划体验:心率监测、gps轨迹、训练计划
热门文章
- 子类可以继承到父类上的注解吗
- 什么是CAS机制?(进阶篇)
- C++描述杭电OJ 2015.偶数求和 ||
- 《四世同堂》金句摘抄(九)
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
- java通过commons-fileupload实现多张图片的上传(servlet)
- 2017蓝桥杯省赛---java---A---1(迷宫)
- DFS VS BFS
- Android 对话框,确定取消
- 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...