Глобальный фильтр сервлетов Java, возможно ли это? - PullRequest
12 голосов
/ 03 октября 2011

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

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

Возможно ли это вообще?

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

Спасибо!

Mikey

Ответы [ 3 ]

18 голосов
/ 03 октября 2011

Вы можете предоставить фильтр в общем пути к классам Tomcat и отредактировать собственный /conf/web.xml Tomcat, чтобы добавить фильтр, но он не работает в несуществующих контекстах веб-приложений (т. Е. Он не охватывает все возможных запросов). ) и это можно переопределить во всех развернутых веб-приложениях. Более надежное решение зависит от используемого контейнера сервлета. В случае 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" />
0 голосов
/ 03 октября 2011

Вы можете настроить шаблон URL вашего фильтра для обработки любого запроса / ответа, который вы хотите.Пожалуйста, проверьте http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping

0 голосов
/ 03 октября 2011

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

...