Tekken

  博客园  ::  :: 新随笔  ::  ::  :: 管理

创建拦截器

1 实现 HandlerInterceptor 创建拦截器

@Component
public class TimeInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		request.setAttribute("startTime", new Date().getTime()); // preHandle中参数传到 postHandle
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		Long start = (Long) request.getAttribute("startTime"); // 从preHandle 获取数据 | handler 可以获取 当前拦截的 控制器方法
		System.out.println("time interceptor 耗时:"+ (new Date().getTime() - start));

	}

        // 不管控制器方法 成功还是失败 都会进入此方法
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		Long start = (Long) request.getAttribute("startTime");
		System.out.println("time interceptor 耗时:"+ (new Date().getTime() - start));
		System.out.println("ex is "+ex);
	}

}

2 配置类中 继承 WebMvcConfigurerAdapter 注册拦截器

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
	
	@SuppressWarnings("unused")
	@Autowired
	private TimeInterceptor timeInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(timeInterceptor);
	}

}

preHandle、postHandle与afterCompletion

preHandle

调用时间:Controller方法处理之前

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行

若返回false,则中断执行,注意:不会进入afterCompletion

postHandle

调用前提:preHandle返回true

调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。

备注:postHandle虽然post打头,但post、get方法都能处理

afterCompletion

调用前提:preHandle返回true

调用时间:DispatcherServlet进行视图的渲染之后

多用于清理资源

  • 切片 拿不到原始的 HTTP请求参数,可以拿到被切片控制器的 方法 参数 ,可以拿到参数值
  • 过滤器 可以拿到原始的 http请求,拿不到 被过滤的 控制器 方法 参数
  • 拦截器 拿不到原始的 HTTP请求参数,可以拿到被拦截的控制器的 方法 参数,但是拿不到 参数值
posted on 2019-12-19 17:27  Tekken250  阅读(154)  评论(0)    收藏  举报