Я пытаюсь реализовать логику c, аналогичную тому, что я сделал с Spring:
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
MyContext.clear();
try {
filterChain.doFilter(request, response);
} finally {
MyContext.clear();
}
}
Наконец, здесь гарантируется, что даже если где-нибудь в строке обработки запроса произойдет что-то плохое, мы все еще очистить контекст. Это важно, потому что мы столкнулись с проблемой загрязнения контекста, когда поток с уже инициализированным контекстом позже используется повторно (контекст в этом случае - InheritableThreadLocal, содержащий некоторое значение, связанное с конкретным запросом).
Проблема заключается в том, что Я не вижу способа сделать что-то подобное с jax-rs - фильтры не должны ничего знать о цепочке, кажется, что очевидно, что finally
на ContainerRequestFilter
работает только внутри этого фильтра, а не всей цепочки. Где можно разместить блок finally
, чтобы он вызывался при сбое обработки запроса?