springcloud(六)

springcloud 专栏收录该内容
6 篇文章 0 订阅

springcloud — zuul

简介

zuul 所解决的问题:
(1)保证了对外服务的安全性,我们应该对服务的访问实现权限的控制
(2)当我们对一个集群访问接口时,当外部对服务访问时,我们应该在原有的接口增 加校验的逻辑
无法直接复用原有的接口。

在这里插入图片描述
案例

1.引入依赖
     <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
     </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    
2.在引导类上添加注解:@EnableZuulProxy 启用zuul
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy //启用zuul
public class ApplicationZuul {
    public static void main(String[] args){
        SpringApplication.run(ApplicationZuul.class);
    }
}

3.yml配置文件中配置路由:
有四种配置路由的方式:如下

server:
  port: 10010

spring:
  application:
    name: service-zuul

#第一种配置
#zuul:
#  routes:
#    service-consumer:
#      path: /service-consumer/**
#      url: http://localhost:8082

#第二种配置:负载均衡需要把zuul注册到eureka中
zuul:
  routes:
    service-consumer:
      path: /service-consumer/**
      serviceId: service-consumer

#第三种配置:最推荐的配置:负载均衡需要把zuul注册到eureka中
#zuul:
#  routes:
#    service-consumer: /service-consumer/**

#第四种配置:负载均衡需要把zuul注册到eureka中:不需要配置,默认的就是想访问服务的服务名 ---> localhost:10010/service-consumer/user/get

#注册信息:添加配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
      
4.运行查看结果

在这里插入图片描述
zuul过滤器

zuul 过滤器的执行步骤

在这里插入图片描述
实例

创建 ZuulFilter 类继承 ZuulFilter 类并重写其中方法

@Component
public class LoginFilter extends ZuulFilter {
    /**
     * 过滤器的类型 : pre route post error
     * @return
     */
    public String filterType() {
        return "pre";
    }

    /**
     * 执行顺序:返回值越小优先级越高
     * @return
     */
    public int filterOrder() {
        return 10;
    }

    /**
     * 是否执行run方法
     * @return
     */
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 编写过滤器的业务逻辑
     * @return
     * @throws ZuulException
     */
    public Object run() throws ZuulException {
        /**
         * zuul 为我们提供了一个 context 上下文对象
         */
        //1.我们应该初始化 context 对象
        RequestContext context = RequestContext.getCurrentContext();
        //2.获取Request对象
        HttpServletRequest request = context.getRequest();
        //3.获取参数
        String name = request.getParameter("name");
        //4.进行判断
        if(name == null){
            //5.拦截不转发
            context.setSendZuulResponse(false);
            //6.设置响应状态码 401-身份未认证
            context.setResponseStatusCode(401);
            //7.设置响应的提示
            context.setResponseBody("error!");
        }
        return null; //返回值为 null 就代表该过滤器什么都不做
    }
}

在这里插入图片描述

  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值