【问题标题】:add custom filter class in applicationcontext.xml在 applicationcontext.xml 中添加自定义过滤器类
【发布时间】:2011-10-17 12:45:55
【问题描述】:

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

【问题讨论】:

    标签: java spring spring-mvc servlet-filters


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      这就是 Spring 的DelegatingFilterProxy 的用武之地。来自javadoc

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

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

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

      最简单的设置是在web.xml 中定义一个DelegatingFilterProxy filter,与applicationContext.xml 中的过滤器bean 同名。 DelegatingFilterProxy 将负责其余的工作。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          • 2012-10-27
          • 1970-01-01
          • 2019-12-25
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多