SpringMVC中的拦截器对应了Web基础中的过滤器。
拦截器和过滤器的区别:
过滤器依赖于Servletr容器,拦截器是springmvc自带的,不依赖容器
用法
1.定义拦截器
public class FirstIntercepter implements HandlerInterceptor{
/**
* 进入Handler之前调用的方法
* 处理:
* 用于身份确认和授权
* 比如确认当前请求是否登陆,如果登陆就方法,否则拦截跳回登陆界面
* @return
* true 放过
* false 拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle 执行了...");
return true;
}
/**
* 进入Handler之后,返回ModelAndView对象之前执行
* 可以修改调整的视图
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("ModelAndView之前执行...");
modelAndView.setViewName("/error.jsp");
modelAndView.addObject("msg", "传递的信息...");
}
/**
* 执行完成Handler之后执行此方法,
* 应用场景:
* 统一异常处理,统一日志处理,资源释放
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("执行完Handler到返回客户端之前执行...");
}
}
2.配置拦截器
<!-- 开启扫描 -->
<context:component-scan base-package="com.spring.controller,com.spring.resolver"></context:component-scan>
<!-- 开启SpringMVC注解的方式 -->
<mvc:annotation-driven >
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 注册拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.spring.intercept.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截器原理