Sie können in Ihrer Anfrage ein Attribut setzen und es in Ihrem zweiten Filter überprüfen.
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);
}
//...
}
}
können Sie den Code oben wie folgt vereinfachen:
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);
}
//...
}
}
diese Weise können Sie überprüfen nur das Vorhandensein des Attributs "executeSecondFilter"
Schöne Idee, aber dieses Beispiel wird NPE werfen, wenn das Attribut nicht festgelegt ist. – BalusC
@BalusC, Deshalb habe ich ein '! = True' gesetzt, aber das automatische Auspacken hat den Objektvergleich gewonnen, jetzt ist es behoben :) –
Sie könnten auch' Boolean.TRUE' verwenden. Ich persönlich finde es jedoch einfach hässlich;) – BalusC