Я считаю, что логика заключается в том, что фильтр является неотъемлемой частью обработки запроса; если какая-либо часть не удалась, весь запрос завершается с ошибкой. Поэтому фильтр, который не инициализируется, считается неспособным обслуживать, поэтому любой запрос, который обычно проходит через него, потерпит неудачу.
Если фильтр не является обязательным для вашего случая, то я хотел бы предложить логику, (почти псевдокод):
private boolean canServe = false;
public void init(FilterConfig fc) {
if(filter activation condition) {
canServe = true;
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
if(canServe) {
// filter logic - filter is ON
}
else chain.doFilter(request, response); // filter is OFF
}
В качестве альтернативы, если наличие фильтра может быть сконфигурирован во время компиляции (на основе, например, среда - DEV , STAGING, PRODUCTION), может быть использована условная сборка (например, Ant), которая удалит определение фильтра из web.xml.
Какое поведение вы ожидаете - выключение контейнера? – home
@home no. вместо этого веб-приложение должно работать без вызова этого фильтра – Bobo