@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; URI uri = HttpRequestFactory.getUri(httpRequest); AtomicReference<Boolean> responseReturned = new AtomicReference<>(null); HttpServletRequest newRequest = runRequestFilterWithMatchingBinding(responseReturned, uri, httpRequest, httpResponse); assert newRequest != null; responseReturned.compareAndSet(null, false); if (!responseReturned.get()) { runChainAndResponseFilters(uri, newRequest, httpResponse, chain); } }