@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);
}
}