Global Java Servlet Filter, is it possible?

人走茶凉 提交于 2019-12-17 19:38:55

问题


I'm writing a project for academic purposes which among other irrelevant stuff, includes writing a filter which monitors servlet/jsp response times.

The thing is that the filter should work on every deployed web application in the server and not only over a specific one, I just couldn't find any information regarding applying "global" filters.

Is it even possible?

NOTE: It's important to mention that i'm using Apache Tomcat 7 as the server of choice.

Thanks!

Mikey


回答1:


You could provide the filter in Tomcat's common classpath and edit Tomcat's own /conf/web.xml to add the filter, but this does not run on non-existing webapp contexts (i.e. it does not cover all possible requests) and it is overrideable in all deployed webapps. The more robust solution depends on the servlet container used. In case of Tomcat, you need the Valve component.

Kickoff example:

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);
    }

}

register it as follows in server.xml:

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



回答2:


Filters are configured per-web app, but Tomcat itself may have a mechanism for timing request/response processing times.




回答3:


You can config the url-pattern of your filter to process any request/response that you want. Please check http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping



来源:https://stackoverflow.com/questions/7630268/global-java-servlet-filter-is-it-possible

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!