本文共 1700 字,大约阅读时间需要 5 分钟。
我有一个Spring 4 MVC应用程序,其中有一个拦截器,用于计算请求响应周期的执行时间,我想设置一个头,如X-Runtime,其值为执行时间处理时间。但是,response.setHeader函数不起作用。当响应到达我的浏览器时,它被覆盖。Spring MVC 4:拦截器无法设置响应头
我有一个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作为我的容器/应用程序服务器。
转载地址:http://eeudv.baihongyu.com/