微服务springcloud—zuul的过滤器的编写和禁用

Zuul的过滤器

过滤器是Zuul的核心组件。

过滤器类型与请求生命周期

PRE:这种过滤器在请求被路由之前调用。可利用这种过滤器实现
身份验证、在集群中选择请求的微服务、记录调试信息等。
ROUTHING: 这种过滤器将请求路由到微服务。这总过滤器用于构建发送给
微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
POST:这种过滤器在路由到微服务以后执行。这种过滤器用来为响应添加标准的
HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
ERROR:在其他阶段发生错误时执行该过滤器。

编写过滤器

1.复制项目microservice-gateway-zuul,将ArtifactId修改为
microservice-gateway-zuul-filter。
2.编写自定义Zuul过滤器

public class PreRequestLogFilter  extends ZuulApplication {
    private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);


    public String filterType() {
        return "pre";
    }


    public int filterOrder() {
        return 1;
    }


    public boolean shouldFilter() {
        return true;
    }

    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        PreRequestLogFilter.LOGGER.info(String.format("send%s request to %s", request.getMethod(), request.getRequestURL().toString()));
        return null;
    }
}

由此可知,自定义的Zuul Filter需实现以下几个方法。
filterType:返回过滤器类型。有pre、route、post、error等几种取值。
filterOrder:返回一个int值来指定过滤器的执行顺序,不同的过滤器允许返回相同的数字。
shouldFilter:返回一个boolean值来判断该过滤器是否要执行,true表示执行,false表示不执行。
run:过滤器的具体逻辑,本例让他打印了请求的HTTP方法以及请求的地址。

3.修改启动类,为启动类添加以下内容

    @Bean
    public PreRequestLogFilter preRequestLogFilter(){
        return new PreRequestLogFilter();
    }

4.测试
启动项目microservice-discovery-eureka。
启动项目microservice-provider-user。
启动项目microservice-gateway-zuul-filter。
访问http://localhost:8040/users/1,可获得如下日志:
在这里插入图片描述

禁用Zuul过滤器

Spring Cloud默认为Zuul编写了一些过滤器。
一些场景下,想要禁用掉部分过滤器,该怎么办呢?
答案很简单,只需设置zuul.SendResponseFilter.post.disable=true,
即可禁用该过滤器。
如果想要禁用自己编写的自定义过滤器只须zuul.preRequestLogFilter.pre.disable = true即可。

本文大部分内容转载自周立的《Spring Cloud与Docker微服务架构实战》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值