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:具体的拦截逻辑

posted @ 2020-05-06 20:24  刀锋意志1  阅读(263)  评论(0编辑  收藏  举报