zoukankan      html  css  js  c++  java
  • zuul组件的使用

    定义一个模块添加zuul组件

     同时引入了依赖

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

    zuul
    1.引入zuul的启动器

    如果只是使用 zuul的 路由转发功能,不需要其他的代码,只需要在配置文件中配合就行,他有四种配置方法。
    2.配置:

    1):
    zuul.routes.<路由名称>.path=/service-provider/**
    zuul.routes.<路由名称>.url=http://localhost:8082
    2):
    zuul.routes.<路由名称>.path=/service-provider/**
    zuul.routes.<路由名称>.serviceId=service-provider
    3):
    zuul.routes.服务名=/service-provider/** *******************     最常使用
    4):
    不用配置,默认就是服务id开头路径

    3.@EnableZuulProxy

    在引导类上添加注解,启用zuul组件

    @SpringBootApplication
    @EnableZuulProxy  // 启用zuul网管组件
    public class ZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulApplication.class, args);
        }
    
    }

    上面的是没有使用eureka注册的例子

    注册到eureka注册中心,可以自动分发,负载均衡

    1.添加eureka依赖

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

    2.启用eureka组件

    @SpringBootApplication
    @EnableZuulProxy  // 启用zuul网管组件
    @EnableDiscoveryClient // 启用eureka组件
    public class ZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulApplication.class, args);
        }
    
    }

    zuul 的过滤器:

    要继承一个类   ZuulFilter  这个类实现四个方法

    filterType:pre route post error
    filterOrder:返回值越小优先级越高
    shouldFilter:是否执行run方法。true执行
    run:具体的拦截逻辑

    注意:最后要把这个自己的filter放入容器中   @Component

    @Component
    public class MyFilter extends ZuulFilter {
        /**
         * 定义filter的类型 ,有四种 :pre(前置) post(后置) route(路由中) error(错误)
         * @return 根据返回值 判定方法类型
         */
        @Override
        public String filterType() {
            return "pre"; // 证明是前置filter
        }
    
        /**
         * filter 的级别,数值越低,优先级越高
         * @return
         */
        @Override
        public int filterOrder() {
            return 10;
        }
    
        /**
         * 是否执行run方法。true执行
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        /**
         * 具体的拦截逻辑
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
            // 如果要过滤登录
            //初始化context上下文对象,
            RequestContext context = RequestContext.getCurrentContext();
            HttpServletRequest request = context.getRequest();
            String toker = request.getParameter("toker");
            if (StringUtils.isBlank(toker)){
                // false为拦截 ,表示不往后转发请求了
                context.setSendZuulResponse(false);
                // 设置响应的状态码
                context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
                // 响应的内容
                context.setResponseBody("无效的身份");
            }
    
            // 返回null 表示filter 什么都不做
            return null;
        }
    }



    过滤器:
    创建一个类继承ZuulFilter基类
    重写四个方法
    filterType:pre route post error
    filterOrder:返回值越小优先级越高
    shouldFilter:是否执行run方法。true执行
    run:具体的拦截逻辑

  • 相关阅读:
    C++:智能指针TR1的shared_ptr和weak_ptr使用介绍
    makefile文件
    php中格式化输出函数vprintf printf sprintf sscanf
    SQLite轻量级数据库简介(转)
    非常有用的免费UI设计工具和资源
    IAR编译duplicate definitions for IAR报错解决办法
    ATMEL推出无需授权费用的ARM处理器的定制SoC MPCFII技术
    DM9000 寄存器的定义
    php 5.3.6 连接sqlite3
    Jquery 取值 发送ajax,并修改原网页的数据
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/12838684.html
Copyright © 2011-2022 走看看