在applicationcontext.xml中添加自定义过滤器类

时间:2011-08-01 14:51:56

标签: java spring spring-mvc servlet-filters

我的应用程序正在使用spring applicationContext.xml。我有一个自定义过滤器类(CustomFilter实现过滤器),我想在我的应用程序中使用。这样做的正确方法是在applicationContext.xml中创建<bean...注册吗?或者只是简单地放入web.xml?我想放在applicationContext.xml里面。但我不知道如何指定将触发此过滤器的“路径”。示例myapp/testcustomfilter将触发此过滤器。

3 个答案:

答案 0 :(得分:1)

FilterToBeanProxy类代理请求弹出托管bean。您必须在web.xml中定义此过滤器,并将targetBean参数指向managed-bean。另请查看FilterChainProxy以定义过滤器链。

答案 1 :(得分:1)

您的过滤器类可以驻留在applicationContext.xml中,并且可以像任何其他Spring bean一样对待。但是,您需要向web.xml添加一些内容以允许服务器容器获取它的句柄。

这是Spring的DelegatingFilterProxy进来的地方。来自javadoc

  

标准Servlet 2.3 Filter的代理,委托给实现Filter接口的Spring管理的bean。支持web.xml中的“targetBeanName”过滤器init-param,在Spring应用程序上下文中指定目标bean的名称。

     

web.xml通常包含DelegatingFilterProxy定义,其指定的filter-name对应于Spring的根应用程序上下文中的bean名称。然后,所有对过滤器代理的调用都将委托给Spring上下文中的那个bean,这是实现标准Servlet 2.3过滤器接口所必需的。

     

这种方法对于具有复杂设置需求的Filter实现特别有用,允许将完整的Spring bean定义机制应用于Filter实例。

最简单的设置是在DelegatingFilterProxy中定义一个web.xml过滤器,其名称与applicationContext.xml中的过滤器bean相同。 DelegatingFilterProxy会照顾其他人。

答案 2 :(得分:1)

只需在Filter注册web.xml即可。我们的应用程序中混合了非Spring和Spring过滤器(非Spring过滤器是遗留代码),它们都可以很好地协同工作。它还使维护更容易,因为您只需要在一个位置查看事物如何链接在一起,因为根据定义,web.xml中的顺序是执行顺序。