十一、SpringMVC拦截器
拦截器(Interceptor)是 Spring MVC 提供的一种强大的功能组件。它可以对用户请求进行拦截,并在请求进入控制器(Controller)之前、控制器处理完请求后、甚至是渲染视图后,执行一些指定的操作。在 Spring MVC 中,拦截器的作用与 Servlet 中的过滤器类似,它主要用于拦截用户请求并做相应的处理。Spring MVC 拦截器使用的是可插拔式的设计,如果我们需要某一拦截器,只需在配置文件中启用该拦截器即可;如果不需要这个拦截器,则只要在配置文件中取消应用该拦截器即可。
Spring拦截器类
//自定义类实现HandlerInterceptor接口
public class MyHandlerInterceptor implements HandlerInterceptor {
//在Controller控制器方法之前执行,其返回值用来表示是否中断后续操作。返回true则继续执行,返回false则终止执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
//在Controller控制器方法调用之后,解析式图之前执行
@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 {
}
}
SpringMVC配置拦截器,拦截器配置有两种方式,第一种方式为全局拦截器,即所有请求方法都会被拦截;第二种方式为局部拦截器,即根据配置路径进行部分拦截
<!--mvc:interceptors标签设置拦截器,配置bean,通过ref引入拦截器,实现全局拦截-->
<bean id="myHandlerInterceptor" class="com.manage.charging.controller.MyHandlerInterceptor"/>
<mvc:interceptors>
<ref bean="myHandlerInterceptor"/>
</mvc:interceptors>
<!--设置局部拦截器,根据配置路径进行拦截,bean和ref可以替换,引入外部bean和在拦截器中声明的效果相同-->
<mvc:interceptors>
<!--拦截器1-->
<mvc:interceptor>
<!--拦截器要拦截的路径-->
<mvc:mapping path="/**"/>
<!--拦截器不拦截的路径-->
<mvc:exclude-mapping path="/findAll"/>
<!--拦截器要应用的拦截器-->
<!--<ref bean="myHandlerInterceptor"/>-->
<bean id="myHandlerInterceptor" class="com.manage.charging.controller.MyHandlerInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
注意:在mvc:interceptor拦截器中,子元素必须按照上述代码的配置顺序进行编写,即 <mvc:mapping>
→ <mvc:exclude-mapping>
→ <bean>
的顺序,否则就会报错。