前言
springMVC提供了三种不同的拦截方法,分别用于拦截控制器Controller方法执行的三个不同阶段
SpringMVC中的拦截器需要实现HandlerInterceptor
@Component
public class FirstInterceptor implements HandlerInterceptor {
//重写接口中的三个拦截方法
}
在SpringMVC的配置文件中进行配置
<mvc:interceptor>
<!-- <bean class="com.cx.springmvc.interceptor.FirstInterceptor"></bean>-->
<!-- <ref bean="FirstInterceptor"></ref>-->
<!-- 以上两种配置方式都是对DispatcherServlet所处理的所有的请求进行拦截 -->
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/testExclude"/>
<!--
以上配置方式可以通过ref或bean标签设置拦截器,通过mvc:mapping设置需要拦截的请求,通过mvc:exclude-mapping设置需要排除的请求,即不需要拦截的请求
-->
</mvc:interceptor>
一、preHandle
拦截位置:控制器方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
二、postHandle
拦截位置:控制器方法执行之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
三、afterCompletion
拦截位置:视图渲染完成之后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}