千家信息网

Spring Cloud中API网关服务Zuul的示例分析

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章主要为大家展示了"Spring Cloud中API网关服务Zuul的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Spring Cloud
千家信息网最后更新 2025年11月16日Spring Cloud中API网关服务Zuul的示例分析

这篇文章主要为大家展示了"Spring Cloud中API网关服务Zuul的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Spring Cloud中API网关服务Zuul的示例分析"这篇文章吧。

构建网关

网关的构建我们通过下面三个步骤来实现。

1.创建Spring Boot工程并添加依赖

首先我们创建一个普通的Spring Boot工程名为api-gateway,然后添加相关依赖,这里我们主要添加两个依赖spring-cloud-starter-zuul和spring-cloud-starter-eureka,spring-cloud-starter-zuul依赖中则包含了ribbon、hystrix、actuator等,如下:

  org.springframework.boot  spring-boot-starter-parent  1.5.7.RELEASE     UTF-8  UTF-8  1.8  Dalston.SR3      org.springframework.boot    spring-boot-starter        org.springframework.cloud    spring-cloud-starter-zuul        org.springframework.cloud    spring-cloud-starter-eureka              org.springframework.cloud      spring-cloud-dependencies      ${spring-cloud.version}      pom      import      

2.添加注解

然后在入口类上添加@EnableZuulProxy注解表示开启Zuul的API网关服务功能,如下:

@SpringBootApplication@EnableZuulProxypublic class ApiGatewayApplication {  public static void main(String[] args) {    SpringApplication.run(ApiGatewayApplication.class, args);  }}

3.配置路由规则

application.properties文件中的配置可以分为两部分,一部分是Zuul应用的基础信息,还有一部分则是路由规则,如下:

# 基础信息配置spring.application.name=api-gatewayserver.port=2006# 路由规则配置zuul.routes.api-a.path=/api-a/**zuul.routes.api-a.serviceId=feign-consumer# API网关也将作为一个服务注册到eureka-server上eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

我们在这里配置了路由规则所有符合/api-a/**的请求都将被转发到feign-consumer服务上,至于feign-consumer服务的地址到底是什么则由eureka-server去分析,我们这里只需要写上服务名即可。以上面的配置为例,如果我请求 http://localhost:2006/api-a/hello1 接口则相当于请求 http://localhost:2005/hello1 (我这里feign-consumer的地址为 http://localhost:2005 ),我们在路由规则中配置的api-a是路由的名字,可以任意定义,但是一组path和serviceId映射关系的路由名要相同。

OK,做好这些之后,我们依次启动我们的eureka-server、provider和feign-consumer,然后访问如下地址 http://localhost:2006/api-a/hello1 ,访问结果如下:

看到这个效果说明我们的API网关服务已经构建成功了,我们发送的符合路由规则的请求自动被转发到相应的服务上去处理了。

请求过滤

构建好了网关,接下来我们就来看看如何利用网关来实现一个简单的权限验证。这里就涉及到了Spring Cloud Zuul中的另外一个核心功能:请求过滤。请求过滤有点类似于Java中Filter过滤器,先将所有的请求拦截下来,然后根据现场情况做出不同的处理,这里我们就来看看Zuul中的过滤器要如何使用。很简单,两个步骤:

1.定义过滤器

首先我们定义一个过滤器继承自ZuulFilter,如下:

public class PermisFilter 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();    String login = request.getParameter("login");    if (login == null) {      ctx.setSendZuulResponse(false);      ctx.setResponseStatusCode(401);      ctx.addZuulResponseHeader("content-type","text/html;charset=utf-8");      ctx.setResponseBody("非法访问");    }    return null;  }}

关于这个类我说如下几点:

1.filterType方法的返回值为过滤器的类型,过滤器的类型决定了过滤器在哪个生命周期执行,pre表示在路由之前执行过滤器,其他可选值还有post、error、route和static,当然也可以自定义。

2.filterOrder方法表示过滤器的执行顺序,当过滤器很多时,这个方法会有意义。

3.shouldFilter方法用来判断过滤器是否执行,true表示执行,false表示不执行,在实际开发中,我们可以根据当前请求地址来决定要不要对该地址进行过滤,这里我直接返回true。

4.run方法则表示过滤的具体逻辑,假设请求地址中携带了login参数的话,则认为是合法请求,否则就是非法请求,如果是非法请求的话,首先设置ctx.setSendZuulResponse(false);表示不对该请求进行路由,然后设置响应码和响应值。这个run方法的返回值在当前版本(Dalston.SR3)中暂时没有任何意义,可以返回任意值。

2.配置过滤器Bean

然后在入口类中配置相关的Bean即可,如下:

@BeanPermisFilter permisFilter() {  return new PermisFilter();}

此时,如果我们访问 http://localhost:2006/api-a/hello1 ,结果如下:

如果给请求地址加上login参数,则结果如下:

以上是"Spring Cloud中API网关服务Zuul的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

过滤器 网关 服务 路由 配置 地址 方法 规则 分析 示例 内容 篇文章 结果 两个 信息 入口 功能 参数 基础 工程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津软件开发外包 曲阜市网络安全等级测评 服务器双路x79主板测评 我的世界怎么刷屏不被踢出服务器 贵州旺天使网络技术有限公司 荣耀盒子怎么破解刷服务器系统 数据库安全审计大数据分析 网络安全具体工作计划 网络安全技术实践与认识 宁波江东区手机游戏软件开发 药品软件开发 csgo服务器列表 企业网络安全意识动画短片的作用 网络安全法第三十三条规定解读 黑马程序员网络技术大一教材 关于网络安全的小报图片 现有的计算机网络安全技术 当代大学生对网络安全 昆明学校开展网络安全教育 数据库直接存枚举 崇明区通信网络技术优势 北京农商银行软件开发工资 tnt跑酷服务器 软件开发需要经历几个步骤 长春图像识别软件开发 0软件开发困难吗 爆笑小说软件开发 考研网络安全专业课考什么 苏州企业软件开发哪家好 发爆器的技术数据库
0