Spring Cloud与微服务之Zuul

╰+攻爆jí腚メ 2022-04-04 05:15 272阅读 0赞

文章目录

  • Zuul的简介
  • Zuul的添加方式
  • 添加网关过滤器

Zuul的简介

  Zuul是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用。

  Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。

  • 身份认证与安全:识别每个资源的验证要求,并拒绝那些鱼要求不符的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 动态路由:动态地将请求路由到不同的后端集群。
  • 压力测试:主键增加指向集群的流量,以了解性能。
  • 负载分配:为每一种负载类型分配对应容量,并启用超出限定值的请求。
  • 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
  • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。

Zuul的添加方式

  导入Zuul依赖:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-zuul</artifactId>
  4. </dependency>

  添加网关服务依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-eureka-server</artifactId>
  4. </dependency>

  添加配置文件:

  1. zuul:
  2. routes:
  3. item-service: #item-service 这个名字是任意写的
  4. path: /item-service/** #配置请求URL的请求规则
  5. #url: http://127.0.0.1:8081 #真正的微服务地址
  6. serviceId: springcloud-goods-item #指定Eureka注册中心的服务id

  启用Zuul:

  在ApiGatewayApplication中添加下面的代码:

  1. @EnableZuulProxy

添加网关过滤器

  创建过滤器的方式如下,就是创建一个类,这里创建的是UserLoginZuulFilter,使其继承Zuul的ZuulFilter,然后我们重写其中的方法,比如如下面的重写其中的run()方法。

  1. package com.lyc.filters;
  2. import com.netflix.zuul.ZuulFilter;
  3. import com.netflix.zuul.context.RequestContext;
  4. import org.apache.commons.lang.StringUtils;
  5. import org.springframework.stereotype.Component;
  6. import javax.servlet.http.HttpServletRequest;
  7. @Component //加入到Spring容器
  8. public class UserLoginZuulFilter extends ZuulFilter {
  9. @Override
  10. public String filterType() {
  11. return "pre"; //设置过滤器类型为pre
  12. }
  13. @Override
  14. public int filterOrder() {
  15. return 0; //设置执行顺序
  16. }
  17. @Override
  18. public boolean shouldFilter() {
  19. return true; //该过滤需要执行
  20. }
  21. @Override
  22. public Object run() { //编写业务逻辑
  23. RequestContext requestContext = RequestContext.getCurrentContext();
  24. HttpServletRequest request = requestContext.getRequest();
  25. String token = request.getParameter("token");
  26. if(StringUtils.isEmpty(token)){
  27. requestContext.setSendZuulResponse(false); //过滤该请求,不对其进行路由
  28. requestContext.setResponseStatusCode(401);
  29. return null;
  30. }
  31. return null;
  32. }
  33. }

  在上面代码中,我们实现功能是判断当前请求的url信息中是否含有登陆令牌token,如果含有,则放行,如果不含有,则返回401错误代码。

  然后在启动类ApiGatewayApplication中启用UserLoginZuulFilter。

  1. /** * 即便是所有的配置都写好了,如果不添加这个Bean方法,那还是不会执行任何的过滤方法 * @return */
  2. @Bean
  3. public UserLoginZuulFilter userLoginZuulFilter(){
  4. return new UserLoginZuulFilter();
  5. }

  这样当我们通过服务网关访问商品服务时,如果我们含有token,我们的访问结果是这样的:

在这里插入图片描述

  当我们去掉token令牌时,访问被阻止:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,272人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud Zuul.

    一、概述  API 网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的 Facade 模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访