• 0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器


    一、概述

      针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean。

      有关启用的可能过滤器,请参阅zuul过滤器包。 

    二、Zuul过滤器使用

    2.1、传统过滤器:java.servlet.Filter

    package javax.servlet;
    
    import java.io.IOException;
    
    public interface Filter {
    
        public void init(FilterConfig filterConfig) throws ServletException;
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
    
        public void destroy();
    }

    2.2、ZuulFilter过滤器类型与生命周期

      Zuul大部分功能是同过过滤器实现。有四种:

      1》PRE,在请求被路由之前调用,可利用这种过滤器实现身份认证、在集群中选择请求的微服务、记录调试信息等

      2》ROUTING,这种过滤器将请求路由到微服务。用于构建发送给微服务的请求,并使用apache httpclient或Netfilx Ribbon请求微服务

      3》POST,在路由到微服务以后执行,可用来为响应添加标准的HTTP HEADER、收集统计信息和指标,将响应从微服务发送个客户段等

      4》ERROR,在其他阶段发生错误是、时执行该过滤器

      参看地址:http://techblog.netfilx.com/2013/06/announcing-zuul-edge-service-in-cloud.html

        https://github.com/Netflix/zuul/wiki/how-it-works

    生命周期图

      

     2.3、代码开发

    PreZuulFilter

    package com.lhx.cloud;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    
    public class PreZuulFilter extends ZuulFilter {
        private static final Logger log = LoggerFactory.getLogger(PreZuulFilter.class);
    
        @Override
        public Object run() {
            // 具体执行
            HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
            String host = request.getRemoteHost();
            PreZuulFilter.log.warn("请求主机:" + host);
            return null;
        }
    
        @Override
        public boolean shouldFilter() {
            // 是否执行次过滤器
            return true;
        }
    
        @Override
        public int filterOrder() {
            // 执行顺序 ,数值越大 越后执行
            return 1;
        }
    
        @Override
        public String filterType() {
            // 执行类型
            return "pre";
        }
    }

    注意要将被类扫描进去

        @Bean
        public PreZuulFilter pre() {
            return new PreZuulFilter();
        }

    2.4、参看代码

    包:spring-cloud-netflix-core-1.4.4.RELEASE.jar下的zuul的filter

    2.5、禁用Zuul的Filter

      禁用过滤器:zuul.<SimpleClassName>.<filterType>.disable=true

      按照惯例,过滤器后面的包是Zuul过滤器类型。示例禁用 org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter 设置zuul.SendResponseFilter.post.disable=true.

  • 相关阅读:
    frp服务器搭建
    vue cli工具UI,AXIOS开发流程
    vue-cli 3.0之跨域请求代理配置及axios路径配置
    利用CSS、JavaScript及Ajax实现图片预加载的三大方法
    Preload图片预加载(jQuery插件)
    Unigui Basic jQuery学习
    emqtt 系统主题
    变量命名法
    Excel-VBA常用对象(Application、Workbook、Worksheet、Range)
    SqlServer对select * from (select *from table) 支持
  • 原文地址:https://www.cnblogs.com/bjlhx/p/9069621.html
Copyright © 2020-2023  润新知