У меня есть приложение Spring 4 MVC, где у меня есть перехватчик, который вычисляет время выполнения для цикла ответа на запрос, и я хочу установить заголовок, например X-Runtime
, со значением время исполнения. Однако функция response.setHeader
не работает. К тому времени, когда ответ достигнет моего брата, он будет отменен.Spring MVC 4: Interceptor не может установить ответ Заголовок
У меня есть фильтр CORS, где я устанавливаю заголовки запросов и ответов, чтобы разрешать запросы на кросс-поиск, и это работает нормально.
Вот мой перехватчик:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ExecuteTimeInterceptor extends HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(ExecuteTimeInterceptor.class.getName());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
long startTime = System.currentTimeMillis();
LOGGER.info("Request URL::" + request.getRequestURL().toString() + ":: Start Time=" + System.currentTimeMillis());
request.setAttribute("startTime", startTime);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
Long startTime = (Long) request.getAttribute("startTime");
Long timeTaken = (System.currentTimeMillis() - startTime);
LOGGER.info("Request URL::" + request.getRequestURL().toString() + ":: Time Taken=" + timeTaken);
response.setHeader("X-Runtime", timeTaken.toString());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// Do nothing.
}
}
Я настроил перехватчик правильно в моем файле dispatcher.xml
конфигурации. Время выполнения регистрируется правильно slf4j
, поэтому я могу подтвердить, что сам перехватчик работает правильно.
Любая идея, почему это происходит? Я использую WildFly (ранее JBoss) 8.1 как мой контейнер/сервер приложений.