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)