我希望根据Filter
定义在web.xml
对象上添加方法后调用该方法。我得到的只是一个WebApplicationContext
对象(让我们称之为:wac
)。
我可以通过以下方式添加新的过滤器对象:wac.getServletContext().addFilter("otherfilter", otherFilter);
此外,我可以通过以下方式成功测试其存在:wac.getServletContext().getFilterRegistration("myfilter")
但是我如何访问(并可能修改)之前添加的Filter
个对象?
答案 0 :(得分:3)
我不确定如何完全按照您的意愿去做,但这个问题通常是用不同的方法解决的。
您可以在应用程序上下文中将Filter
声明为bean,然后在web.xml
中注册DelegatingFilterProxy
以将过滤委派给您的过滤器。
在这种情况下,您的过滤器将是常规的Spring bean,并且您可以像任何其他bean一样访问它。
答案 1 :(得分:1)
Servlet API没有提供任何机制来在Filter
实例添加到ServletContext
后直接访问它。使用Servlet API最好的是你已经找到的FilterRegistration
接口,它允许你通过web.xml修改同一组配置选项。
根据您想要做什么,您可能能够使用init参数编写解决此问题的方法,但这永远不会是一个特别干净的解决方案。我选择了axtavt建议的DelegatingFilterProxy
解决方案。