简介
SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理。
处理器拦截器 HandlerInterceptor 中的方法
preHandle:预处理回调方法,实现处理器的预处理,返回值:true表示继续流程,false表示流程中断。
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finall 但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
拦截器适配器HandlerInterceptorAdapter
有时候我们可能只需要实现三个回调方法中的某一个,如果实现HandlerInterceptor接口的话,三个方法必须实现,不管你需不需要,
此时spring提供了一个HandlerInterceptorAdapter适配器(种适配器设计模式的实现),允许我们只实现需要的回调方法。
@Component
public class BaseDataSourceInterceptor extends HandlerInterceptorAdapter {
public BaseDataSourceInterceptor() {
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
用法:配置自定义拦截器
- 配置自定义的拦截器 <mvc:interceptors>
- 配置一个拦截器 <mvc:interceptor>
- 配置拦截器的拦截路径 <mvc:mapping> 属性 path="/**"/
- 配置拦截器中不需要拦截的路径 <mvc:exclude-mapping>
- 定义在<mvc: interceptor>元素中,表示匹配指定路径的请求才进行拦截
- <bean id="dataSourceInterceptor" class=""/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<mvc:exclude-mapping path="/static/**"/>
<mvc:exclude-mapping path="/heart/**"/>
<bean id="dataSourceInterceptor" class="com.wiwj.cbs.common.interceptor.BaseDataSourceInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>