Глобальный Java Servlet Filter, возможно ли это?

Я пишу проект для академических целей, который среди других нерелевантных вещей включает в себя запись фильтра, который отслеживает время ответа сервлета /jsp.

Дело в том, что фильтр должен работать на каждом развернутом веб-приложении на сервере, а не только на определенном, я просто не мог найти никакой информации о применении "глобальных" фильтров.

Возможно ли это?

Примечание: Важно отметить, что я использую Apache Tomcat 7 в качестве сервера выбора.

Спасибо!

Мики

Ответ 1

Вы можете предоставить фильтр в общедоступном пути Tomcat и отредактировать Tomcat own /conf/web.xml, чтобы добавить фильтр, но это не работает в несуществующих контекстах webapp (то есть он не охватывает все запросов), и он переопределяется во всех развернутых веб-папках. Более надежное решение зависит от используемого контейнера сервлетов. В случае Tomcat вам нужно компонент Valve.

Пример Kickoff:

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

Фильтры настроены для каждого веб-приложения, но сам Tomcat может иметь механизм для времени обработки запроса/ответа времени.