2014-03-13 148 views
1

我想根據web.xml定義在添加對象後調用Filter對象上的方法。我得到的只是一個WebApplicationContext對象(我們稱之爲:wac)。通過WebApplicationContext訪問過濾器對象

  • 我能夠通過添加新的過濾對象:wac.getServletContext().addFilter("otherfilter", otherFilter);

  • 而且,我可以通過成功地測試了它的存在:wac.getServletContext().getFilterRegistration("myfilter")

但我可以如何訪問(和可能會修改)Filter之前已添加的對象?

回答

3

我不確定如何完全按照您的要求來完成,但通常使用不同的方法解決此問題。

您可以將您的Filter聲明爲應用程序上下文中的bean,然後在web.xml中註冊DelegatingFilterProxy以將過濾委託給您的過濾器。

在這種情況下,你的過濾器將是一個普通的Spring bean,你可以像其他任何bean一樣訪問它。

1

一旦將實例添加到ServletContext,Servlet API不會提供任何機制來直接訪問Filter實例。您將通過Servlet API獲得的最好的接口是您已經找到的FilterRegistration接口,它允許您通過web.xml修改相同的一組配置選項。

根據你想要做什麼,你可能能夠使用init參數來解決這個問題,但這永遠不會是一個特別乾淨的解決方案。我會用axtavt建議的DelegatingFilterProxy解決方案。