欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC&&&拦截器基本配置

程序员文章站 2022-07-09 18:14:28
...

SpringMVC-拦截器

拦截器
拦截器(Interceptor) 是一种动态拦截方法调用的机制
作用:
   1.在指定的方法调用前后执行预先设定的代码
   2.阻止原始方法的执行
核心原理:AOP思想
  
拦截器链:多个拦截器按照一定的顺序,对原始被调动的功能进行增强   

SpringMVC&&&拦截器基本配置

拦截器和Filter有什么不同

  1. 拦截器是springMVC的技术,拦截控制的Controller(拦截springbean)
  2. filter是tomcat中所有接收到的请求都可以被拦截

SpringMVC&&&拦截器基本配置

拦截器使用

1. 编写一个拦截器

实现HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {
//处理器运行之前处理
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("前置运行----a1");
       //返回值为false将拦截原始处理器的运行
     //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
        return true;
    }
     //处理器运行之后执行
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("后置运行----b1");
    }
    
  //所有拦截器的后置执行全部结束后,执行该操作  
  //拦截器最后执行的方法,无论原始方法是否执行
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("完成运行----c1");
    }
}
//三个方法的运行顺序为    preHandle -> postHandle -> afterCompletion
 //如果preHandle返回值为false,三个方法仅运行preHandle
2. 配置拦截在何时生效
     <!--开启拦截器使用-->
 <mvc:interceptors>
     <!--开启具体的拦截器的使用,可以配置多个-->
     <mvc:interceptor>
         <!--设置拦截器的拦截路径,支持*通配-->
         <!--  /**         表示拦截所有映射 表示根路径及其子路径下任意名称-->
         <!-- /*          表示拦截所有/开头的映射  仅表示根路径下的任意名称不再往下匹配目录-->
         <!-- /user/*     表示拦截所有/user/开头的映射-->
         <!-- /user/add*  表示拦截所有/user/开头,且具体映射名称以add开头的映射-->
         <!-- /user/*All  表示拦截所有/user/开头,且具体映射名称以All结尾的映射-->
         <!--<mvc:mapping path="/*"/>-->
         <mvc:mapping path="/**"/>
         <mvc:mapping path="/handleRun*"/>
         <!-- exclude-mapping 用于剔除不符合要求的配置项加速配置过程 ,设置拦截排除的路径,配置/**或/*,达到快速配置的目的-->
         <mvc:exclude-mapping path="/b*"/>
         <!--指定具体的拦截器类-->
         <bean class="com.itheima.interceptor.MyInterceptor"/>
     </mvc:interceptor>
     <!--配置多个拦截器,配置顺序即为最终运行顺序-->
     <mvc:interceptor>
         <mvc:mapping path="/*"/>
         <bean class="com.itheima.interceptor.MyInterceptor2"/>
     </mvc:interceptor>
     <mvc:interceptor>
         <mvc:mapping path="/*"/>
         <bean class="com.itheima.interceptor.MyInterceptor3"/>
     </mvc:interceptor>
 </mvc:interceptors>
拦截器链配置

SpringMVC&&&拦截器基本配置

注意: 配置顺序为先配置执行位置,后配置执行类

  1. 请求必须携带token(随机字符串)
  2. token是每次后端响应给用户
  • 实现步骤
    • 后端存储token在session
    • 前端传token在request的parameter中
责任链模式

SpringMVC&&&拦截器基本配置

相关标签: spring