【问题标题】:Accessing a Filter object through a WebApplicationContext通过 WebApplicationContext 访问 Filter 对象
【发布时间】:2014-04-18 12:32:03
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不确定如何完全按照您的意愿进行操作,但是通常使用不同的方法来解决此问题。

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

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

    【讨论】:

      【解决方案2】:

      一旦将Filter 实例添加到ServletContext,Servlet API 不提供任何机制来直接访问它。使用 Servlet API 获得的最佳效果是您已经找到的 FilterRegistration 接口,它允许您修改与通过 web.xml 相同的一组配置选项。

      根据您想要做什么,您也许可以使用初始化参数编写解决此问题的方法,但这绝不会是一个特别干净的解决方案。我会选择 axtavt 建议的 DelegatingFilterProxy 解决方案。

      【讨论】:

        猜你喜欢
        • 2017-05-28
        • 2015-08-17
        • 2012-02-28
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 1970-01-01
        相关资源
        最近更新 更多