携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第36天,点击查看活动详情
SpringMVC拦截器:
SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行前置处理和后置处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个 controller生命周期之内可以多次调用。
1.pom.xml引入依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
代码说明:
provided
产生的原因是:tomcat中也有servlet-api包,这样,发生了冲突
解决方法:添加provided,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat的时候,就不会冲突了
2.新增interceptor包并且新建MyInterceptor类文件
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURL()+"请求之前");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(request.getRequestURL()+"目标请求成功");
// HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(request.getRequestURL()+"相应内容已经产生");
// HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
代码说明:MyInterceptor实现HandlerInterceptor并且实现三个接口:
- preHandle:请求前置
- postHandle:请求返回之前
- afterCompletion:响应内容返回
3.resources/applicationContext.xml新增配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.imooc.restful.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
代码说明:
- <mvc:mapping path="/**"/>:表示请求要过滤哪些接口
- class=com.imooc.restful.interceptor.MyInterceptor:表示拦截类对应的包