美文网首页
04.SpringCloud中的网关Zuul的使用

04.SpringCloud中的网关Zuul的使用

作者: LewisZhu | 来源:发表于2019-12-25 20:52 被阅读0次

    01.创建一个spring initialize的工程

    创建的时候之间勾上cloud routing中的zuul,会自动导入zuul的依赖。

    02.配置application.yml

    //基本配置
    spring:
      application:
        name: gateway-zuul
    server:
      port: 7600
    //注册zuul网关到eureka
    eureka:
      client:
        service-url:
          defaultZone: http://root:123456@localhost7776/eureka/
    //zuul相关的设定
    zuul:
      routes:
        user-consumer:/user/**     //表示拦截user-consumer这个client中的所有以user开头的请求,这样访问地址就是localhost:7600/user/xx    xx表示user-consumer中的接口名字。
        xxxx-consumer:/xxxx/**
      SecondFilter  //关闭第二个过滤器
        pre:
          disable:true
    

    03.添加注解

    @SpringBootApplication
    @EnableZuulProxy
    public static GateGatewayZuulApplication{
    }

    04.网关中的过滤器的使用

    @Component   //注册组件到spring的容器
    public class PreFilter extends ZuulFilter {
    
     @Override
      public Object run() { 
        //请求信息的封装类
        RequestContext ctx = RequestContext.getCurrentContext(); 
        HttpServletRequest request = ctx.getRequest(); 
        String token = request.getHeader(s: "token");
        if (token == null || token.equals("")) {
           ctx.setSendZuulResponse(false);
           ctx.setResponsStatusCode(401);
           ctx.setResponseBody("{\"mes\":\"401,access without permission\"}");
           return “access denied”;
        }
        return “pass”;
        //String username = request.getParameter("username");// 获取请求的参数 
      } 
      
      @Override
      public boolean shouldFilter() { 
        return true;// 是否执行该过滤器,此处为true,说明需要过滤 
        
        //当然有可能有这样的逻辑 动态获取这个状态
        //首先可以在优先级高的Filter中设置zuulResponse为false
        //RequestContext ctx = RequestContext.getCurrentContext();
        //ctx.setSendZuulResponse(false);
        //其次从这里可以动态取
        return ctx.sendZuulResponse();
      
        //也可以在优先级高的Filter中设置参数
       ctx.set("thirdfilter",false); 
        return ctx.sendZuulResponse() && (Boolean)ctx.get("thirdfilter")
        
      } 
      
      @Override
      public int filterOrder() { 
        return 0;// 优先级为0,数字越大,优先级越低 
      } 
      
      @Override
      public String filterType() { 
        //return "pre";// 前置过滤器,另外filterT雨棚还有route,post,error。
        return FilterConstants.PRE_TYPE;
      }
    }
    

    相关文章

      网友评论

          本文标题:04.SpringCloud中的网关Zuul的使用

          本文链接:https://www.haomeiwen.com/subject/gnwcoctx.html