zoukankan      html  css  js  c++  java
  • SpringMVC拦截器

    简述

    SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。

    可以自定义拦截器链,拦截器链就是将拦截器按照一定的顺序结成一条链,在访问被拦截的方法时拦截器链中的拦截器会按着定义的顺序进行。

    拦截器和过滤器的区别:

    • 过滤器是servlet规范中的一部分,任何框架都可以使用过滤器技术
    • 拦截器是SpringMVC特有的
    • 过滤器配置了/*,可以拦截任何资源
    • 拦截器只会对控制器中的方法进行拦截

    拦截器也是AOP思想的一种实现

    自定义的拦截器需要实现HandlerInterceptor接口。

    步骤:

    新建一个Controller的控制器

     1 package zh.stu;
     2 
     3 
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 
     7 @Controller
     8 @RequestMapping("/person")
     9 public class PersonController {
    10 
    11     @RequestMapping(path = "/interceptor.do")
    12     public String Interceptor(){
    13         System.out.println("controller中的 方法");
    14         return "successful";
    15     }
    16 }

    创建类,实现HandlerInterceptor接口,重写需要的方法。方法中的解析见下。

     1 package zh.stu;
     2 
     3 import org.springframework.web.servlet.HandlerInterceptor;
     4 import org.springframework.web.servlet.ModelAndView;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 public class MyInterceptor implements HandlerInterceptor {
    10 
    11 
    12     /**
    13      * 拦截controller中的方法
    14      *放行了执行controller中的方法
    15      *
    16      *
    17      *
    18      * @param request
    19      * @param response
    20      * @param handler
    21      * @return return true 》》方行
    22      *          return false》》拦截
    23      * @throws Exception
    24      *
    25      *
    26      * 注意要在SpringMVC.xml文件中配置拦截器
    27      */
    28     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    29         System.out.println("拦截器中的方法执行");
    30         return false;
    31     }
    32 
    33     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    34         System.out.println("postHandler中的方法执行");
    35         request.getRequestDispatcher("/index.jsp").forward(request,response);
    36         return;
    37     }
    38 
    39     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    40         System.out.println("afterCompletion中的方法执行");
    41     }
    42 }

    在SpringMVC.xml文件中配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:mvc="http://www.springframework.org/schema/mvc"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6        xsi:schemaLocation="
     7         http://www.springframework.org/schema/beans
     8         http://www.springframework.org/schema/beans/spring-beans.xsd
     9         http://www.springframework.org/schema/mvc
    10         http://www.springframework.org/schema/mvc/spring-mvc.xsd
    11         http://www.springframework.org/schema/context
    12         http://www.springframework.org/schema/context/spring-context.xsd">
    13 
    14     <!--配置创建Spring容器创建的时候要扫描的包-->
    15     <context:component-scan base-package="zh.stu"></context:component-scan>
    16 
    17     <!--配置试图解析器-->
    18     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    19         <!--跳转的页面路径-->
    20         <property name="prefix" value="/WEB-INF/pages/"/>
    21         <!--跳转页面的后缀名称-->
    22         <property name="suffix" value=".jsp"/>
    23     </bean>
    24     <!--配置静态资源不被拦截-->
    25     <mvc:resources location="/css/" mapping="/css/**"/>  <!-- 样式 -->
    26     <mvc:resources location="/images/" mapping="/images/**"/>  <!-- 图片 -->
    27     <mvc:resources location="/js/" mapping="/js/**"/>  <!-- javascript -->
    28 
    29     <!--配置多个拦截器-->
    30     <mvc:interceptors>
    31         <!--配置拦截器-->
    32         <mvc:interceptor>
    33             <!--该拦截器拦截哪些个资源-->
    34             <mvc:mapping path="/person/*"/>
    35             <!--哪些资源不被拦截-->
    36             <!--<mvc:exclude-mapping path=""/>-->
    37             <!--配置拦截器的对象-->
    38             <bean class="zh.stu.PersonController"/>
    39         </mvc:interceptor>
    40     </mvc:interceptors>
    41     <!--配置Spring开启注解mvc的支持-->
    42     <mvc:annotation-driven/>
    43 </beans>

    HandlerInterceptor接口中的方法

    • preHandle是Controller方法执行之前拦截的方法
      • 可以使用request或response跳转到指定的页面
      • return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。
      • return false不放行,不会执行controller中的方法
    • postHandler是controller方法执行后执行的方法,在jsp是土执行前
      • 可以使用request或response跳转到指定的页面
      • 如果指定了跳转的页面,那么controller方法跳转的页面将不会显示
    • afterCompletion方法是在jsp执行后执行
      • reques或response不能在跳转页面了
  • 相关阅读:
    Oracle创建序列,删除序列
    java base58
    百度地图 显示,定位,轮廓图
    百度地图 圈出省份轮廓图并高亮
    基于双向链表的增删改查和排序(C++实现)
    统计字母出现次数
    线程安全
    C++面试秘笈笔记
    牛客选择题刷题
    new delete 浅析
  • 原文地址:https://www.cnblogs.com/LBJLAKERS/p/12322391.html
Copyright © 2011-2022 走看看