package com.dounine.corgi.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.Duration;
import java.time.LocalDateTime;
/**
* Created by huanghuanlai on 16/6/20.
*/
public class RequestInterceptor extends HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestInterceptor.class);
private static final String STARTTIME = "startTime";
/**
* Servlet请求超过指定时间作提示
*/
private static final int ACTIONE_SECONDS = 2;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute(STARTTIME, LocalDateTime.now());
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
LocalDateTime startTime = LocalDateTime.parse(request.getAttribute(STARTTIME).toString());
long seconds = Duration.between(startTime,LocalDateTime.now()).getSeconds();
if(seconds>=ACTIONE_SECONDS){
LOGGER.info(request.getRequestURI()+" 处理时间为 => "+ seconds+"s");
}
super.afterCompletion(request, response, handler, ex);
}
}