通过WebApplicationContext访问Filter对象

时间:2014-03-13 16:04:49

标签: java spring java-ee servlets servlet-filters

我希望根据Filter定义在web.xml对象上添加方法后调用该方法。我得到的只是一个WebApplicationContext对象(让我们称之为:wac)。

  • 我可以通过以下方式添加新的过滤器对象:wac.getServletContext().addFilter("otherfilter", otherFilter);

  • 此外,我可以通过以下方式成功测试其存在:wac.getServletContext().getFilterRegistration("myfilter")

但是我如何访问(并可能修改)之前添加的Filter个对象?

2 个答案:

答案 0 :(得分:3)

我不确定如何完全按照您的意愿去做,但这个问题通常是用不同的方法解决的。

您可以在应用程序上下文中将Filter声明为bean,然后在web.xml中注册DelegatingFilterProxy以将过滤委派给您的过滤器。

在这种情况下,您的过滤器将是常规的Spring bean,并且您可以像任何其他bean一样访问它。

答案 1 :(得分:1)

Servlet API没有提供任何机制来在Filter实例添加到ServletContext后直接访问它。使用Servlet API最好的是你已经找到的FilterRegistration接口,它允许你通过web.xml修改同一组配置选项。

根据您想要做什么,您可能能够使用init参数编写解决此问题的方法,但这永远不会是一个特别干净的解决方案。我选择了axtavt建议的DelegatingFilterProxy解决方案。