【问题标题】:Global Java Servlet Filter, is it possible?Global Java Servlet Filter,有可能吗?
【发布时间】:2011-11-29 14:59:35
【问题描述】:

我正在为学术目的编写一个项目,其中包括编写一个监视 servlet/jsp 响应时间的过滤器。

问题是过滤器应该适用于服务器中每个已部署的 Web 应用程序,而不仅仅是一个特定的应用程序,我只是找不到有关应用“全局”过滤器的任何信息。

有可能吗?

注意: 值得一提的是,我使用 Apache Tomcat 7 作为首选服务器。

谢谢!

米奇

【问题讨论】:

    标签: java jakarta-ee tomcat servlet-filters


    【解决方案1】:

    您可以在 Tomcat 的公共类路径中提供过滤器并编辑 Tomcat 自己的 /conf/web.xml 以添加过滤器,但这不能在不存在的 webapp 上下文中运行(即它不涵盖所有可能requests) 并且它在所有部署的 webapps 中都是可覆盖的。更健壮的解决方案取决于使用的 servlet 容器。如果是 Tomcat,则需要 the Valve component

    启动示例:

    import org.apache.catalina.valves.ValveBase;
    
    public class MyValve extends ValveBase {
    
        @Override
        public void invoke(Request request, Response response) throws IOException, ServletException {
            // ...
    
            getNext().invoke(request, response);
        }
    
    }
    

    server.xml注册如下:

    <Valve className="com.example.MyValve" />
    

    【讨论】:

    • 在 tomcat /conf/web.xml 中添加正确的 声明怎么样?这行得通吗?
    • 还可以。仅当 webapp 的 /WEB-INF/web.xml 有另一个具有相同过滤器名称的过滤器时,它们才可被覆盖。如果您能承受这种风险,请继续将其放入 Tomcat 的/conf/web.xml。阀门绝对不能从 webapp 端被覆盖/禁用。
    • 最后一个问题 - 使用上述方法(阀门或过滤器)之一编译的过滤器代码应该放在哪里?
    • 在Tomcat的公共类路径中。就像在 Tomcat/lib 中的 JAR 一样,或者在由 /conf/catalina.properties 中的 common.loader 属性表示的路径中。
    • 谢谢伙计,你真的很有帮助:)
    【解决方案2】:

    您可以配置过滤器的 url 模式来处理您想要的任何请求/响应。请查看http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping

    【讨论】:

    • 对不起,这根本不能回答 OP 的问题。他特别提到他想要一些适用于给定 Servlet 容器上的所有 webapps 的东西。
    【解决方案3】:

    过滤器是为每个 Web 应用程序配置的,但 Tomcat 本身可能有一种用于计时请求/响应处理时间的机制。

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 2013-06-14
      • 2011-05-27
      • 1970-01-01
      • 2011-11-25
      • 2023-04-06
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多