1. SpringMVC拦截器

1.1 拦截器(interceptor)的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理后处理

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方
法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

1.2 拦截器和过滤器区别

07_spring-MVC拦截器 - 图1

1.3 拦截器是快速入门

自定义拦截器很简单,只有如下三步:

  • 创建拦截器类实现HandlerInterceptor接口
  • 配置拦截器
  • 测试拦截器的拦截效果

创建拦截器类实现HandlerInterceptor接口

  1. public class MyInterceptor1 implements HandlerInterceptor {
  2. // 在目标方法之前执行
  3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  4. System.out.println("preHandle...");
  5. String param = request.getParameter("param");
  6. if ("yes".equals(param)) {
  7. return true;
  8. } else {
  9. request.getRequestDispatcher("/error.jsp").forward(request,response);
  10. return false;
  11. }
  12. // return true;
  13. }
  14. // 在目标方法执行之后 视图返回之前执行
  15. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  16. modelAndView.addObject("name","postHandle");
  17. System.out.println("postHandle...");
  18. }
  19. // 在流程都执行完毕后 执行
  20. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  21. System.out.println("afterCompletion...");
  22. }
  23. }
  1. 配置拦截器
  1. <mvc:interceptors>
  2. <mvc:interceptor>
  3. <!--对哪些资源执行拦截操作-->
  4. <mvc:mapping path="/**"/>
  5. <bean class="com.itheima.interceptor.MyInterceptor1"/>
  6. </mvc:interceptor>
  7. </mvc:interceptors>
  1. 测试拦截器的拦截效果(编写目标方法)
  1. @Controller
  2. public class TargetController {
  3. @RequestMapping("/target")
  4. public ModelAndView show() {
  5. System.out.println("目标资源执行...");
  6. ModelAndView modelAndView = new ModelAndView();
  7. modelAndView.addObject("name","zhangsan");
  8. modelAndView.setViewName("index");
  9. return modelAndView;
  10. }
  11. }
  1. 测试拦截器的拦截效果(访问网址)

1.4 多拦截器操作

同上,在编写一个MyHandlerInterceptor2操作,测试执行顺序

先被拦截的后执行

07_spring-MVC拦截器 - 图2

1.5 拦截器方法说明

07_spring-MVC拦截器 - 图3

1.6 知识要点

自定义拦截器步骤

  • 创建拦截器类实现HandlerInterceptor接口
  • 配置拦截器
  • 测试拦截器的拦截效果

1.7 案例-用户登录权限控制