拦截器简介
Spring Web MVC的处理器拦截器
类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
拦截器执行流程
入门案例
使用拦截器需要实现HandlerInterceptor接口,它有三个方法
preHandler:预处理方法,返回值true表示继续执行,false表示流程中断
postHandler:后处理方法
afterCompletion:请求处理完毕后执行的回调方法
//拦截器
public class FirstInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("first preHandler");
return true;
}
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("first postHandler");
}
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("first afterCompletion");
}
}
处理器代码
@Controller
public class FirstController {
@RequestMapping("/first")
public String doFirst(){
System.out.println("doFirst");
return "index";
}
}
配置Springxml文件
<!--:参数方法名解析器-->
<bean id="methodNameResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--扫描包下所有的被标注的类-->
<context:component-scan base-package="day17Interceptor"/>
<!--配置拦截器-->
<mvc:interceptors>
<!--配置第一个拦截器-->
<mvc:interceptor>
<!--拦截所有请求-->
<mvc:mapping path="/**"/>
<!--配置自定义拦截器-->
<bean class="day17Interceptor.FirstInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!--配置注解驱动-->
<mvc:annotation-driven/>
访问:http://localhost:8080/first
结果:
如果需要定义多个拦截器就需要在<mvc:Interceptors>节点中在添加一个<mvc:Interceptor>子节点,例如
<!--配置拦截器-->
<mvc:interceptors>
<!--配置第一个拦截器-->
<mvc:interceptor>
<!--拦截所有请求-->
<mvc:mapping path="/**"/>
<!--配置自定义拦截器-->
<bean class="day17Interceptor.FirstInterceptor"/>
</mvc:interceptor>
<!--配置第二个拦截器-->
<mvc:interceptor>
<!--拦截所有请求-->
<mvc:mapping path="/**"/>
<!--配置自定义拦截器-->
<bean class="day17Interceptor.SecondInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>