Bạn có thể đặt Thuộc tính trong yêu cầu của mình và kiểm tra trong bộ lọc thứ hai.
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);
}
//...
}
}
Bạn có thể đơn giản hóa các mã trên như thế này:
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);
}
//...
}
}
Bằng cách này bạn chỉ cần kiểm tra sự hiện diện của các thuộc tính "executeSecondFilter"
Nguồn
2010-09-17 19:02:12
Ý tưởng hay, nhưng ví dụ này sẽ ném NPE nếu thuộc tính không được đặt. – BalusC
@BalusC, Đó là lý do tại sao tôi đặt một '! = True', nhưng tự động unboxing thắng so sánh đối tượng, bây giờ nó được sửa chữa :) –
Bạn cũng có thể sử dụng' Boolean.TRUE'. Tuy nhiên, cá nhân tôi thấy nó khá xấu xí;) – BalusC