2017-09-27 163 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,並從篩選器內調用另一個篩選器。這樣你的代碼定義了這兩個過濾器的順序。我知道這不是最好的方式,但也許它可以幫助你。