拦截器
2019-08-13 本文已影响0人
WhyDoWeLive
用于拦截用户请求并做响应的处理,例如用户权限验证、判断用户是否已经登陆
通过在配置文件中配置和取消配置某个拦截器,实现可插拔式设计
可通过实现HandlerInterceptor接口或继承抽象类HandlerInterceptorAdapter定义一个拦截器
HandlerInterceptor的三个接口
- boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
在请求被Controller处理之前被调用。多个拦截器的preHandle会按照拦截器的声明顺序链式调用,若前面的拦截器返回false,则后面的拦截器和Controller不再执行;若返回false则调用下一个拦截器的preHandler,若已经是最后一个Interceptor,则调用但前请求的Controller方法 - void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView)
在请求被Controller处理之后,dispatcherServlet进行视图渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView进行操作。调用该方法还需一个前置条件,即所属Intercept的preHandle返回True。多个拦截器的postHandle会按照拦截器声明的相反顺序链式调用 - afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
在DispatcherServlet渲染视图后执行,主要用于资源清理。调用该方法还需一个前置条件,即所属Intercept的preHandle返回True。