返回 导航

SpringBoot / Cloud

hangge.com

API网关服务组件Spring Cloud Zuul使用详解11(过滤器详解3:禁用过滤器)

作者:hangge | 2020-10-26 08:10

十三、禁用过滤器

    无论是核心过滤器还是自定义过滤器,只要在 API 网关应用中为它们创建了实例,那么默认情况下,它们都是启用状态。如果有些过滤器我们不想使用了,通常有如下两种方式禁用它们。

1,重写 shouldFilter 逻辑

只要重写某个过滤器的 shouldFilter 逻辑,让它返回 false,这样该过滤器对于任何请求都不会被执行。
注意这种方式缺乏灵活性:
  • 由于要直接修改过滤器逻辑,我们不得不重新编译程序,并且如果该过滤器在未来一段时间还有可能被启用的时候,那么就又得修改代码并编译程序。
  • 同时对于核心过滤器来说,就更为麻烦,我们不得不获取源码来进行修改和编译。
@Component
public class AccessFilter extends ZuulFilter {

    private static Logger log = LoggerFactory.getLogger(AccessFilter.class);

    @Override
    public String filterType() {
        // 前置过滤器
        return "pre";
    }

    @Override
    public int filterOrder() {
        // 优先级,数字越大,优先级越低
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        //是否执行该过滤器,false代表不需要过滤
        return false;
    }

    @Override
    public Object run() {
        doSomething();
        return null;
    }

    private void doSomething() {
        throw new RuntimeException("一个未知的错误...");
    }
}

2,通过配置来禁用指定过滤器

(1)Zuul 中特别提供了一个参数来禁用指定的过滤器,该参数的配置格式如下:
  • <SimpleClassName> 代表过滤器的类名,比如上面的 AccessFilter
  • <filterType> 代表过滤器的类型,比如上面的 pre
zuul.<SimpleClassName>.<filterType>.disable=true

(2)如果我我们需要禁用上面定义的 AccessFilter 过滤器,只需要在 application.properties 配置文件中添加如下配置即可:
zuul.AccessFilter.pre.disable=true

(3)除了可以禁用自定义的过滤器之外,该参数还可以用来禁用 Spring Cloud Zuul 中默认定义的核心过滤器。比如下面我们禁用 Zuul 自带的 forward 请求转发过滤器 SendForwardFilter
这样我们就可以抛开 Spring Cloud Zuul 自带的那套核心过滤器,实现一套更符合我们实际需求的处理机制。
zuul.SendResponseFilter.post.disable=true
评论

全部评论(0)

回到顶部