2017-10-04 88 views
0

從Servlet 3.0開始,我們現在可以通過註釋(@WebFilter)或動態(通過ServletContext對象)聲明Web過濾器。有什麼方法可以指定在web.xml中聲明它之外的過濾器的順序嗎?

我知道使用@WebFilter不允許指定過濾順序。同樣,我還沒有找到任何方式來指定通過ServletContext.addFilter()方法動態聲明時的順序。我查看了FilterRegistration對象,但也沒有任何內容。

這是否意味着在過濾器鏈中指定過濾器順序的唯一方法是通過web.xml?有沒有其他機制可用?這不是Servlet 3.0+的重大監督嗎?

在鏈中執行通過註釋或通過ServletContext對象聲明的過濾器?在web.xml中聲明的那些結尾處?未定義?

回答

1

這是否意味着在過濾器鏈中指定過濾器順序的唯一方法是通過web.xml?

是的。檢查Servlet 3.0 spec的以下部分:

  • 4.4.2編程方式添加和配置過濾器過濾器的

  • 6.2.4配置在Web應用程序

  • 8.1.2 @WebFilter

提到過濾器排序的唯一地方是在6.2.4節中,它指定了如何使用web.xml。在addFilter()@WebFilter的章節中未提及訂購。

有沒有其他機制可用?

不在Servlet 3.0規範中,所以沒有。

這不是Servlet 3.0+的重大疏漏嗎?

我懷疑這種遺漏是「疏忽」。來自BalusC的評論是relevant SO post爲什麼沒有其他機制提供了一個合理的理由:如果您的webapp帶有包含過濾器的第三方庫,該怎麼辦?事先很難說出它的順序。

在鏈中執行通過註釋或通過ServletContext對象聲明的過濾器?在web.xml中聲明的那些結尾處? 未定義?

由於規範沒有解決這些情況,因此排序必然是未定義的。

相關問題