赞
踩
SpringMvc的处理器拦截器类Interceptor似于Servlet容器中的过滤器Filter。
用于对处理器(Controller方法)进行预处理和后处理。
底层通过动态代理模式完成。
存在多个拦截器时,拦截器执行链内的拦截原则:先进后出
,按照拦截器定义顺序调用。
依赖springMvc框架
,不依赖servlet容器;过滤器依赖于servlet容器。/*
之后,可以对所有要访问的资源进行拦截)。拦截器是Spring命令空间内的一个bean
,可以注入其他springBean,调用service信息等。public class ThirdInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
<!-- 自定义拦截器 --> <mvc:interceptors> <!-- 拦截所有路径 --> <bean class="com.sa.spring.test.interceptor.FirstInterceptor" /> <!-- 拦截所有路径方法 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.sa.spring.test.interceptor.SecondInterceptor"/> </mvc:interceptor> <!-- 拦截指定路径并排除部分路径 --> <mvc:interceptor> <!-- 拦截指定路径 --> <mvc:mapping path="/user/**"/> <!-- 排除部分路径 --> <mvc:exclude-mapping path="/user/initUser"/> <bean class="com.sa.spring.test.interceptor.ThirdInterceptor" /> </mvc:interceptor> </mvc:interceptors>
源码:
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;
调用时机:
预处理回调方法,在业务处理器处理请求之前
被调用。
若方法返回值为true,请求继续(调用下一个拦截器或处理器方法);若方法返回值为false,请求处理流程中断,不会继续调用其他的拦截器或处理器方法,此时需要通过response产生响应
源码:
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;
调用时机:
后处理回调方法,在业务处理器处理请求执行完成后
,生成视图之前
执行。
可以通过modelAndView对模型数据进行处理或对视图进行处理。
源码:
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;
调用时机:
整个请求处理完毕回调方法,即在视图渲染完毕时
调用。
主要作用是用于进行资源清理工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。