问题 全局Java Servlet过滤器,有可能吗?


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

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

它甚至可能吗?

注意: 重要的是要提到我正在使用 Apache Tomcat 7作为首选服务器。

谢谢!

米奇


6670
2017-10-03 00:58


起源



答案:


您可以在Tomcat的公共类路径中提供过滤器并编辑Tomcat自己的过滤器 /conf/web.xml 添加过滤器,但这不会在不存在的webapp上下文上运行(即它不会覆盖 所有 可能的请求)并且它可以在所有已部署的Web应用程序中重写。更强大的解决方案取决于所使用的servlet容器。如果是Tomcat,您需要 阀门组件

开球示例:

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" />

17
2017-10-03 01:31



如何在tomcat /conf/web.xml中添加正确的<filter>声明?那会有用吗? - Mikey S.
也能。只要webapp,它们就会被覆盖 /WEB-INF/web.xml 另一个具有相同的过滤器名称。如果你能负担得起这种风险,请继续把它放在Tomcat中 /conf/web.xml。从webapp端开始,阀门无法覆盖/禁用。 - BalusC
最后一个问题 - 使用上述方法之一(阀门或过滤器)将编译的过滤器代码放在何处? - Mikey S.
在Tomcat的公共类路径中。就像JAR一样 Tomcat/lib 或者在由...表示的路径中 common.loader 物业 /conf/catalina.properties。 - BalusC
谢谢你的伴侣,你真的很有帮助:) - Mikey S.


答案:


您可以在Tomcat的公共类路径中提供过滤器并编辑Tomcat自己的过滤器 /conf/web.xml 添加过滤器,但这不会在不存在的webapp上下文上运行(即它不会覆盖 所有 可能的请求)并且它可以在所有已部署的Web应用程序中重写。更强大的解决方案取决于所使用的servlet容器。如果是Tomcat,您需要 阀门组件

开球示例:

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" />

17
2017-10-03 01:31



如何在tomcat /conf/web.xml中添加正确的<filter>声明?那会有用吗? - Mikey S.
也能。只要webapp,它们就会被覆盖 /WEB-INF/web.xml 另一个具有相同的过滤器名称。如果你能负担得起这种风险,请继续把它放在Tomcat中 /conf/web.xml。从webapp端开始,阀门无法覆盖/禁用。 - BalusC
最后一个问题 - 使用上述方法之一(阀门或过滤器)将编译的过滤器代码放在何处? - Mikey S.
在Tomcat的公共类路径中。就像JAR一样 Tomcat/lib 或者在由...表示的路径中 common.loader 物业 /conf/catalina.properties。 - BalusC
谢谢你的伴侣,你真的很有帮助:) - Mikey S.


过滤器是按Web应用程序配置的,但Tomcat本身可能具有定时请求/响应处理时间的机制。


0
2017-10-03 01:04





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


-2
2017-10-03 02:03



对不起,这根本没有回答OP的问题。他特别提到他想要一些适用于给定Servlet容器上所有webapps的东西。 - Dan