Итак, я наблюдал некоторые ответы по этой теме, и я понимаю, что после завершения вызова doFilter () уже слишком поздно изменять заголовок repsonse, и для лучшей обработки этого случая я должен использовать оболочку ответа.
Я хочу знать, как справиться со случаем, когда я хочу установить заголовок, только если ответ, отправленный обратно в мой фильтр, имеет определенный код состояния.Должна ли эта логика обрабатываться до doFilter?В классе Request Wrapper?Я немного смущен.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest;
HttpServletResponse servlettResponse = (HttpServletResponse)response;
CrossOriginResponseWrapper crossOriginResponseWrapper = new CrossOriginResponseWrapper(servlettResponse);
if (crossOriginResponseWrapper.getStatus() == 404) {
crossOriginResponseWrapper.addHeader("Access-Control-Allow-Origin", "*");
}
chain.doFilter(request, crossOriginResponseWrapper);
LOG.info(crossOriginResponseWrapper.getHeader("Access-Control-Allow-Origin"));
LOG.info(servlettResponse.getStatus());
}
ОБНОВЛЕНИЕ:
Является ли единственный способ решить эти переопределяющие методы в оболочке, чтобы ответ не записывался / не очищался до того, как он попадет в мой фильтр?Есть ли более простое решение?
(Ссылка на этот ответ) Ответ фиксируется, и цепочка doFilter разорвана