zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    SAP一些学习网址
    Silverlight RIA Servcie 删除子对象实体提交错误的问题[解决]
    Clean up your BizTalk databases
    Silverlight RIA Service开发实战总结(一)
    Silverlight ToolKitAutoCompleteBox bug(Style bug)
    domaincontext load 回调
    数据驱动开发For Silverlight WCF RIA1.0 三步曲
    xpath 查询忽略大小
    代码重构之没有理由拒绝Lambda表达式
    离写出大师级代码只差这一步
  • 原文地址:https://www.cnblogs.com/bjlhx/p/9069621.html
Copyright © 2011-2022 走看看