SpringCloud(七)网关zuul配置过滤器

zuul过滤器类型:

  • PRE:请求被路由之前被调用,身份验证
  • ROUTING:将请求路由到微服务。
  • POST:路由到微服务之后执行
  • ERROR:在其他阶段发生错误时执行。

zuul实现filter的方法:

  • filterType:返回过滤器的类型:pre、route、post、error
  • filterOrder:返回int值,来确定filter的执行顺序,不同的过滤器允许返回相同的数字
  • shouldFilter:返回boolean确定filter是否执行
  • run:过滤器执行内容

PerFilter过滤器类代码如下

    package com.accp.qqzuul.filter;
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
    import org.springframework.stereotype.Component;
    import javax.servlet.http.HttpServletRequest;
    
    @Component  //注册过滤器
    public class PerFilter extends ZuulFilter {
        @Override
        public String filterType() {
            return FilterConstants.PRE_TYPE;//过滤器类型
        }

    @Override
    public int filterOrder() {
        return 1;//设置优先级为1,数字越小,优先级越高
    }

    @Override
    public boolean shouldFilter() {
        return true;  //是否启用该过滤器,true为启用,false为不启用
    }

    @Override
    public Object run() {  //过滤器执行的内容
        RequestContext cxt = RequestContext.getCurrentContext();//请求的上下文
        HttpServletRequest request = cxt.getRequest();//获取requst对象

        String token = request.getHeader("token");//获取头部信息
          if(null == token|| "".equals(token)){
              cxt.setSendZuulResponse(false);//不执行
               cxt.setResponseStatusCode(401);//返回状态码401
               cxt.setResponseBody("{\"msg\":\"令牌还没带来!\"}");//返回一个json数据
               System.out.println("令牌没有---");
          }

        return null;
    }
   }

yml.文件配置禁用过滤器: SecondFilter是你的过滤器名称,per是过滤器的类型, disable为true表示禁用

   #禁用SecondFilter过滤器
  SecondFilter:
    pre:
      disable: true

上一篇:SpringCloud(六)网关代理

猜你喜欢

转载自blog.csdn.net/weixin_43844158/article/details/86537830