全局 Java Servlet Filter,可能吗?

2022-09-04 20:28:12

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

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

这有可能吗?

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

谢谢!

麦克


答案 1

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

开球示例:

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

答案 2

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


推荐