2017-09-27 148 views
0

我有几个Servlet过滤器需要依次执行 - 一个接一个地执行。 我不想在web.xml文件中声明它们,也不想使用@WebFilter注释。 而是使用ServletContext.addFilter()方法。过滤器注册时的Servlet过滤器顺序编程

问题是:筛选器是否按照相同的顺序链接,因为我称之为addFilter()方法?这是记录在某处吗?

我看到了这个问题和答案:How to define servlet filter order of execution using annotations in WAR 但它并没有涵盖我有的编程案例。

回答

0

看来,过滤器是按照ServletContext的方法被调用的顺序添加的,至少在Tomcat中是这样。

如果我们看一下tomcat 8的源代码,有一个ContextFilterMap类(在StandardContext.java中),它保留了一个过滤器映射数组。有两种方法:add和addBefore,它们保留一个保持插入顺序的“插入点”变量。

0

我不知道添加了ServletContext.addFilter的过滤器顺序的任何定义,所以我不希望有特殊的顺序。

我不知道你是否称它为代码异味但可以添加一个筛选器addFilter,并从筛选器内调用另一个筛选器。这样你的代码定义了这两个过滤器的顺序。我知道这不是最好的方式,但也许它可以帮助你。