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