Вы можете установить Атрибут в своем запросе и проверить его во втором фильтре.
public class FirstFilter implements Filter {
//...
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setAttribute("executeSecondFilter", true);
//...
if(someReason)
servletRequest.setAttribute("executeSecondFilter", false);
filterChain.doFilter(servletRequest, servletResponse);
}
}
public class SecondFilter implements Filter {
//..
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest.getAttribute("executeSecondFilter") == null || !((Boolean) servletRequest.getAttribute("executeSecondFilter"))) {
filterChain.doFilter(servletRequest, servletResponse);
}
//...
}
}
Вы можете упростить код, приведенный выше, как это:
public class FirstFilter implements Filter {
//...
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//...
if(someReason)
servletRequest.setAttribute("executeSecondFilter", false);
filterChain.doFilter(servletRequest, servletResponse);
}
}
public class SecondFilter implements Filter {
//..
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest.getAttribute("executeSecondFilter") != null) {
filterChain.doFilter(servletRequest, servletResponse);
}
//...
}
}
Таким образом, вы просто проверить наличие атрибута «executeSecondFilter»
Приятная идея, но этот пример вызовет NPE, если атрибут не установлен. – BalusC
@BalusC, поэтому я положил '! = True', но auto-unboxing выиграл сравнение Object, теперь он исправлен :) –
Вы также можете использовать' Boolean.TRUE'. Тем не менее, я лично считаю это уродливым;) – BalusC