Глобальный 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 может иметь механизм для времени обработки запроса/ответа времени.
Ответ 3
Вы можете настроить url-шаблон вашего фильтра для обработки любого запроса/ответа, который вы хотите. Проверьте http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping