使用Spring Cloud Zuul实现过滤器或拦截器功能案例

简介: 使用Spring Cloud Zuul实现过滤器或拦截器功能案例

 Spring Cloud的API网关不但可以实现类似NGINX+Lua强大的路由分发,实现动静页面的分流,更重要可以实现对所有发往后端微服务请求的拦截。Zuul主要有四种类型的过滤器,我们可以为特定的url模式添加任意数量的过滤器。

  • “pre” 预过滤器 - 在路由分发一个请求之前调用。
  • “post” 后过滤器 - 在路由分发一个请求后调用。
  • “route” 路由过滤器 - 用于路由请求分发。
  • “error” 错误过滤器 - 在处理请求时发生错误时调用

上图显示这几种过滤器的前后调用顺序,第一个是pre过滤器然后是Route过滤器,最后响应是post过滤器。

下面我们开始演示这几种过滤器的开发,Springcloud的开发三板斧就是pom.xml、application配置和元注解三种,首先pom.xml如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

下面是自己实现这四种过滤器,只要实现com.netflix.zuul.ZuulFilter接口,然后实现方法filterType,返回字符串为这四种类型pre post route error。

@Override
public String filterType() {
    return "pre;//关键在这里,四种类型定义
}

比如实现pre类型预处理器代码:

public class PreFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }
    @Override
    public int filterOrder() {
        return 0;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        System.out.println(
                "Pre Filter: Request Method : " + request.getMethod() + " " +
                        "Request URL : " + request.getRequestURL().toString());
        return null;
    }
}

这里虽然类名PreFilter,其实是可以任意取名的,在run方法中我们定义了该过滤器应该做的事情。

其他几种也是类似这样建立,这里省去,可见文后的源码。

下面我们来运行调试验证,首先还是启动Producer服务,当然也可以启动注册服务器,这取决于你只使用URL路径分发还是服务ID分发。这部分设置见上篇

运行我们的Zuul应用,然后访问http://localhost:8080/producer/articles

控制台输出如下:

Pre Filter: Request Method : GET Request URL : http://localhost:8080/producer/articles
Route: Using Route Filter
Post:Using Post Filter

   过滤器作用比较大,一般用来作为安全拦截,当然最好不要侵入业务,否则这里变成一个业务服务网关,当然你也可以美其名曰“中台”,其实像ESB消息总线等复杂业务侵入式的中台都是多余的。微服务倡导智能终端哑管道理念,哑管道就是管道必须简单,是个哑巴,不要太智能。

   由于Zuul充当我们所有微服务的代理,我们可以使用Zuul服务来实现一些跨领域的问题,如安全性,速率限制等。一个常见的用例是将Authentication头转发给所有下游服务。

  通常在微服务中,我们将使用OAuth服务进行身份验证和授权。一旦客户端通过身份验证,OAuth服务将生成一个令牌,该令牌应包含在发送给其他微服务的请求中,以便客户端无需单独为每个服务进行身份验证。我们可以使用Zuul过滤器来实现这样的功能。当然实际中会使用JWT令牌格式。

目录
相关文章
|
4天前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
|
3天前
|
Java API Spring
Spring5入门到实战------1、Spring5框架概述、入门案例
这篇文章是Spring5框架的入门教程,概述了Spring框架的核心概念和特点,并通过一个创建普通Java类的案例,详细演示了从下载Spring核心Jar包、创建配置文件、编写测试代码到运行测试结果的完整流程,涵盖了Spring IOC容器的使用和依赖注入的基本用法。
Spring5入门到实战------1、Spring5框架概述、入门案例
|
22天前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
140 15
|
28天前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14206 19
|
18天前
|
前端开发 JavaScript Java
Spring Boot中使用拦截器
本节主要介绍了 Spring Boot 中拦截器的使用,从拦截器的创建、配置,到拦截器对静态资源的影响,都做了详细的分析。Spring Boot 2.0 之后拦截器的配置支持两种方式,可以根据实际情况选择不同的配置方式。最后结合实际中的使用,举了两个常用的场景,希望读者能够认真消化,掌握拦截器的使用。
|
22天前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
41 3
|
3天前
|
Java API Spring
Spring5入门到实战------1、Spring5框架概述、入门案例
这篇文章是Spring5框架的入门教程,概述了Spring框架的核心概念和特点,并通过一个创建普通Java类的案例,详细演示了从下载Spring核心Jar包、创建配置文件、编写测试代码到运行测试结果的完整流程,涵盖了Spring IOC容器的使用和依赖注入的基本用法。
|
6天前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
20 0
|
26天前
|
消息中间件 Java Nacos
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
48 0