概述
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并做相应的处理。例如通过拦截器可以进行
权限验证
、记录请求信息的日志
、判断用户是否登录
等。
定义
要使用Spring MVC中的拦截器,就需要对拦截器类进行
定义
和配置
。通常拦截器类可以通过两种方式来定义。一种是通过实现HandlerInterceptor
接口,或继承HandlerInterceptor
接口的实现类(如HandlerInterceptorAdapter)来定义;另一种是通过实现WebRequestInterceptor
接口,或继承WebRequestInterceptor接口的实现类来定义。
原理图
多个拦截器
代码实践
拦截器类
public class CustomInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception {
System.out.println("CustomInterceptor...preHandle");
//对拦截的请求进行放行处理
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("CustomInterceptor...postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler,
Exception ex) throws Exception {
System.out.println("CustomInterceptor...afterCompletion");
}
}
配置拦截器
springmvc-servlet.xml
<mvc:interceptors>
<mvc:interceptor>
//拦截路径
<mvc:mapping path="/t2"/>
<bean class="com.wu.interceptor.CustomInterceptor"> </bean>
</mvc:interceptor>
</mvc:interceptors>
控制层
//映射访问路径
@RequestMapping("/t2")
public String index(Model model){
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "ControllerTest2");
System.out.println("=========================");
//返回视图位置
return "test";
}