**
* @Auther: Jhon Li 攔截器
* @Date: 2018/12/20 12:16
* @Description: 注意這裏雖然申明瞭@Component 也要在config中的配置類做配置
*
* 攔截器既能拿到原始的http的響應和請求,也能拿到真正處理請求的方法的信息,但是拿不到這個方法被調用的時候,被調用的值
* 缺點 : handler 這個參數 沒辦法拿到方法真正參數的值
*/
@Component
public class TimeInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
System.out.println("preHandle");
httpServletRequest.setAttribute("starttime",new Date().getTime());
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
long starttime =(long) httpServletRequest.getAttribute("starttime");
System.out.println("postHandle 耗時:"+(new Date().getTime()-starttime));
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("afterCompletion");
long starttime =(long) httpServletRequest.getAttribute("starttime");
System.out.println("afterCompletion 耗時:"+(new Date().getTime()-starttime));
}
}
有了@component註解也需要在配置類加入進去,不然米又效果
/**
* @Auther: Jhon Li
* @Date: 2018/12/20 12:04
* @Description:
*/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter{
@Autowired
private TimeInterceptor timeInterceptor;
//添加攔截器到配置中
@Override
public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(timeInterceptor);
}
// @Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
TimeFilter timeFilter=new TimeFilter();
filterRegistrationBean.setFilter(timeFilter);
List<String> urls=new ArrayList<>();
urls.add("/**"); //指定那些url 過濾
filterRegistrationBean.setUrlPatterns(urls);
return filterRegistrationBean;
}
}