一尘不染

全局Java Servlet过滤器,可以吗?

tomcat

我正在写一个用于学术目的的项目,除其他无关紧要的内容外,还包括编写一个监视servlet / jsp响应时间的过滤器。

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

可能吗

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

谢谢!

米奇


阅读 241

收藏
2020-06-16

共1个答案

一尘不染

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

开球示例:

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" />
2020-06-16