前文回顾:

Spring Cloud(一)Eureka Server-单体及集群搭建

Spring Cloud(二) 配置Eureka Client

Spring Cloud(三) 熔断器Hystrix

Spring Cloud(四) API网关Zuul

一.执行流程

Filter是Zuul的核心,用来实现对外服务的控制。Filter的生命周期有4个,分别是“PRE”、“ROUTING”、“POST”、“ERROR”,整个生命周期可以用下图来表示。

Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。

  • PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

  • ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

  • POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

  • ERROR:在其他阶段发生错误时执行该过滤器。

二.自定义Filter

我们假设有这样一个场景,因为服务网关应对的是外部的所有请求,为了避免产生安全隐患,我们需要对请求做一定的限制,比如请求中含有Token便让请求继续往下走,如果请求不带Token就直接返回并给出提示。

在上一篇博客的Zuul项目中添加如下内容:

1.自定义TokenFilter

public class TokenFilter extends ZuulFilter {
​private final Logger logger = LoggerFactory.getLogger(TokenFilter.class);
​@Overridepublic String filterType() {// 可以在请求路由之前被调用return "pre";}
​@Overridepublic int filterOrder() {// filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低return 0;}
​@Overridepublic boolean shouldFilter() {// 是否执行该过滤器,此处为true,说明需要过滤return true;}
​@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();
​logger.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString());
​// 获取请求的参数String token = request.getParameter("token");
​if (StringUtils.isNotBlank(token)) {// 对请求进行路由ctx.setSendZuulResponse(true);ctx.setResponseStatusCode(200);ctx.set("isSuccess", true);return null;} else {// 不对其进行路由ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(400);ctx.setResponseBody("token is empty");ctx.set("isSuccess", false);return null;}}
}

2.在启动类中添加Bean

@Bean
public TokenFilter tokenFilter() {return new TokenFilter();
}

3.测试

依次启动 spring-cloud-eurekaspring-cloud-producergateway-service-zuul-eureka

访问:http://localhost:8888/producer/hello?name=yfy

返回:token is empty

添加token参数,再次访问:http://localhost:8888/producer/hello?name=yfy&token=test

返回:hello yfy,welcome to Spring Cloud

Spring Cloud(五) Zuul Filter相关推荐

  1. Spring Cloud实战Zuul统一异常处理

    Spring Cloud实战Zuul统一异常处理 Spring Cloud Zuul中自己实现的一些核心过滤器,以及这些过滤器在请求生命周期中的不同作用.我们会发现在这些核心过滤器中并没有实现erro ...

  2. 520、Java Spring Cloud Alibaba -【Spring Cloud Alibaba Zuul】 2021.11.02

    目录 1. Zuul 简介 2.Zuul 网关的引入 3.Zuul 网关的快速搭建 4.参考链接 1. Zuul 简介 Zuul 微服务网关是为 Spring Cloud Netflix 提供动态路由 ...

  3. Spring Cloud Netflix Zuul中的速率限制

    来源:SpringForAll社区 1.引言 Spring Cloud Netflix Zuul 是一个包含Netflix Zuul的开源网关.它为Spring Boot应用增加了一些特别的特性.不幸 ...

  4. SpringCloud - Spring Cloud 之 Zuul和Gateway网关(十四)

    Spring Cloud Gateway是Spring Cloud的一个子项目.而zuul则是Netflix公司的项目,只是Spring 将zuul集成在Spring Cloud中使用而已. 因为zu ...

  5. spring cloud gateway之filter篇

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理, ...

  6. java版电子商务spring cloud分布式微服务b2b2c社交电商-spring cloud gateway之filter篇

    社交电商平台源码请加企鹅求求:一零三八七七四六二六.filter的作用和生命周期 由filter工作流程点,可以知道filter有着非常重要的作用,在"pre"类型的过滤器可以做参 ...

  7. 【Java进阶】Spring Cloud中Zuul配置与案例实现

    目录 Zuul是什么 zuul 能做什么 过滤器的生命周期 zuul组件 搭建一个注册Eureka中心的Web服务 项目截图 pom application.yml配置 启动项ZuulApplicat ...

  8. Spring Cloud Netfilx Zuul : API网关服务

    Spring Cloud Zuul 是Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的API网关使用,支持动态路由与过滤功能,本文将对其用法进行详细介绍. 1.Z ...

  9. 4. Spring Cloud Gateway自定义Filter

    1. Filter介绍 Filter是实现在网关路由之前或之后加入一些逻辑,或者拦截过滤的工具, 称为过滤器. 在Spring Cloud Gateway中除了内置的Filter之外,也可以自定义Fi ...

最新文章

  1. RabbitMQ入门(二)-helloworld
  2. coffeeScript学习01
  3. 数据库设计笔记——关系型数据库基础知识(三)
  4. 【项目合作】指甲识别与实时渲染
  5. 融合智能将成时代方舟?中科创达技术大会向未来答疑
  6. Ogre 1.7 SDKTRAY 初探
  7. 云计算数据中心Spine-Leaf模型简介
  8. Flyod和Warshall
  9. C中遇到错误error: jump to label [-fpermissive]的解决办法
  10. 数据库内获取准确的当前时间
  11. 学好Linux运维决心书
  12. 题目60 相同字母消除法(栈)(ok)
  13. 一位8421BCD码转5421码,2421码,余3码组合电路(附思路)
  14. java计算机毕业设计翔隆生鲜超市进货管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  15. was not registered for synchronization because错误
  16. 【趣味AI】手把手教你用AI画画
  17. 章丘谋定大葱功能性-农业大健康·万祥军:不当村官当会长
  18. 自制计算机之与门或门和非门
  19. 读书笔记之《安全边际(中文完整版)》
  20. android metal,魅蓝metal评测:金属机身/Flyme5.1系统

热门文章

  1. [Windows子系统] Ubuntu18.04安装及换源
  2. HTTP中response响应数据获取
  3. buu Unencode
  4. [armv8-arch64]linux kernel 5.9的异常量表介绍(irq,fiq,sync,svc)
  5. optee运行时来了一个REE(linux)中断--代码导读
  6. 导入表注入原理和C语言实现
  7. 控制寄存器,CPU缓存,PWT,PCD
  8. c++对象长度之静态数据成员(3)
  9. 160个Crackme023
  10. 【python】简单记录