在SpringMVC中定义拦截器有两种方法:
- 实现HandlerInterceptor接口,或者继承实现HandlerInterceptor接口的实现类(例如HandlerInterceptorAdapter)。
- 实现WebRequestInterceptor接口,或者继承实现WebRequestInterceptor接口的实现类。
若实现HandlerInterceptor接口,就要实现三个方法:
- preHandle方法:该方法在执行控制器方法之前执行。
- postHandle方法:该方法在执行控制器方法调用之后,且在返回ModelAndView
之前执行。 - afterCompletion方法:该方法在执行完控制器方法之后执行。
针对HandlerMapping配置:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor1" />
<ref bean="myInterceptor2" />
</list>
</property>
</bean>
<bean id="MyInterceptor1" class="com.intercepcor.MyInterceptor1" />
<bean id="MyInterceptor2" class="com.intercepcor.MyInterceptor2" />
针对全局配置:
<!-- 配置拦截器-->
<mvc:interceptors>
<!-- 使用bean直接定义在<mvc:interceptors>下面的拦截器将拦截所有请求-->
<bean class="com.springmvc.interceptor.MyInterceptor"></bean>
<!-- 定义多个拦截器,顺序执行-->
<mvc:interceptor> <!-- 拦截器1-->
<mvc:mapping path="/**"/> <!-- 配置拦截器作用的路径-->
<mvc:exclude-mapping path="/**"/> <!-- 配置不需要拦截器作用的路径-->
<!-- 定义在<mvc:interceptor>下面的拦截器,表示对匹配路径请求才进行拦截-->
<bean class="com.springmvc.interceptor.MyInterceptor1" />
</mvc:interceptor>
<mvc:interceptor> <!-- 拦截器2-->
<mvc:mapping path="/hello"/> <!-- 配置拦截器作用的路径-->
<mvc:mapping path="/error"/> <!-- 配置拦截器作用的路径-->
<bean class="com.springmvc.interceptor.MyInterceptor2" />
</mvc:interceptor>
</mvc:interceptors>
若实现WebRequestInterceptor接口,就要实现三个方法:.
- preHandle(WebRequest request)方法:该方法在执行控制器方法之前执行。
- postHandle(WebRequest request, Model model)方法:该方法在执行控制器方法调用之后,且在返回ModelAndView
之前执行。 - afterCompletion(WebRequest request, Exception exception)方法:该方法在执行完控制器方法之后执行。