zoukankan      html  css  js  c++  java
  • springcloud中zuul网关服务

    一、配置

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

    Zuul可以通过加载动态过滤机制,从而实现以下各项功能:

      1.验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。

      2.审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。

      3.动态路由: 以动态方式根据需要将请求路由至不同后端集群处。

      4.压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。

      5.负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。

      6.静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。

      7.多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

    二、配置路由规则

    zuul:
      routes:
        # 给服务配置路由
        cloud-feign:
          path: /feign/**

    默认路由规则

    Zuul和Eureka结合使用,可以实现路由的自动配置,自动配置的路由以服务名称为匹配路径,相当于如下配置:

    # 默认路由规则
    zuul:
      routes:
        # 给服务配置路由
        cloud-feign:
          path: /cloud-feign/**

    去掉默认路由规则

    zuul:
      #关闭默认路由配置
      ignored-services: cloud-feign 

    配置访问前缀

    zuul:   
    #不能用/zuul
    prefix: /proxy

    Header过滤及重定向添加Host

    zuul:
       #配置过滤敏感的请求头信息,设置为空就不会过滤
       sensitive-headers: Cookie,Set-Cookie,Authorization
       #设置为true重定向是会添加host请求头
       add-host-header: true

    三、过滤器

    过滤器类型:

    pre:在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
    routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;
    post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
    error:请求在其他阶段发生错误时执行。
    自定义过滤器

    /**
     * @auther: mufeng
     * @Date: 2019/11/26 16:25
     */
    @Slf4j
    public class AccessFilter extends ZuulFilter {
        /**
         * 过滤器类型,有pre、routing、post、error四种。
         * @return
         */
        @Override
        public String filterType() {
            return "pre";
        }
    
        /**
         * 过滤器执行顺序,数值越小优先级越高。
         * @return
         */
        @Override
        public int filterOrder() {
            return 0;
        }
    
        /**
         * 是否进行过滤,返回true会执行过滤。
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        /**
         * 自定义的过滤器逻辑,当shouldFilter()返回true时会执行
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
    
            RequestContext currentContext = RequestContext.getCurrentContext();
            HttpServletRequest request = currentContext.getRequest();
            log.info("send {} request to {}",request.getMethod(),request.getRequestURL().toString());
            String token = request.getParameter("at");
            if(1==2){
                log.warn("access token is empty");
                currentContext.setSendZuulResponse(false);
                currentContext.setResponseStatusCode(401);
                return null;
            }
            log.info("access token ok");
            return null;
    
        }
    }

    核心过滤器

    过滤器名称  过滤类型  优先级 过滤器的作用
    ServletDetectionFilter  pre  -3 检测当前请求是通过DispatcherServlet处理运行的还是ZuulServlet运行处理的。
    Servlet30WrapperFilter  pre  -2 对原始的HttpServletRequest进行包装。
    FormBodyWrapperFilter  pre  -1 将Content-Type为application/x-www-form-urlencoded或multipart/form-data的请求包装成FormBodyRequestWrapper对象。
    DebugFilter  route  1 根据zuul.debug.request的配置来决定是否打印debug日志。
    PreDecorationFilter  route  5 对当前请求进行预处理以便执行后续操作。
    RibbonRoutingFilter  route  10 通过Ribbon和Hystrix来向服务实例发起请求,并将请求结果进行返回。
    SimpleHostRoutingFilter  route  100 只对请求上下文中有routeHost参数的进行处理,直接使用HttpClient向routeHost对应的物理地址进行转发。
    SendForwardFilter  route  500 只对请求上下文中有forward.to参数的进行处理,进行本地跳转。
    SendErrorFilter  post  0 当其他过滤器内部发生异常时的会由它来进行处理,产生错误响应。
    SendResponseFilter  post  1000 利用请求上下文的响应信息来组织请求成功的响应内容。

    禁用过滤器:

    zuul:
      filterClassName:
         filter:
           disable: true

    禁用PreLogFilter的示例配置

    zuul:
      PreLogFilter:
        pre:
          disable: true 
  • 相关阅读:
    解决:IIS APPPOOLDefaultAppPool 登录失败的问题
    C#操作txt文件并清空添加操作
    linux修改yum本地源的方法
    CentOS防火墙开启、关闭与开放指定端口
    CentOS配置SSH远程连接
    判断js对象是否拥有某一个属性的js代码
    bash脚本输入密码不回显问题的解决方法
    js控制表单操作的常用代码小结
    绝版Node--Sequlize搭建服务(Node全栈之路 二)
    绝版Node--Sequlize搭建服务(Node全栈之路)
  • 原文地址:https://www.cnblogs.com/mufeng07/p/12876161.html
Copyright © 2011-2022 走看看