Spring MVC的拦截器(Interceptor) 与Java Servlet的过滤器(Filter) 类似,它
主要用于拦截用户的请求并做相应的处理。通常应用在权限验证、记录请求信息的日
志、判断用户是否登录等功能上。
拦截器与过滤器区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,拦截器里可以注入一个service,可以调用业务逻辑。
拦截器配置
package com.HandlerInterceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HandlerInterceptor1 implements HandlerInterceptor {
//进入Handler方法之前执行
//用于身份认证、身份授权
//比如身份认证,如果认证通过表示当前用户没有登录,此方法拦截不再向下执行
@Override
public boolean preHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("1执行业务逻辑之前,被执行");
// return false 表示拦截,不向下执行
// return true 表示放行
return true;
}
//进入Handler方法之后返回modelandview之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("1执行业务逻辑之后,解析渲染视图之前,被执行");
}
//执行Handler完成此方法
//应用场景:统一异常处理,统一日志处理
@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("1执行业务逻辑之后,视图渲染之后,被执行");
}
}



