• 后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节4(核心对象,拦截器)


    1、概念

      拦截器是由Spring提供,类似Filter功能的类,它可以拦截DispatcherServlet分发的请求。

      与Filter不同之处在于,Filter适用于所有Servlet,而拦截器(Interceptor)只适用于DispatcherServlet分发的请求。当同时有Filter,Interceptor存在的情况下,请求的执行链如下:

      Filter chain---->DispatcherServlet的doService方法------>获取HandlerExecutionChain,执行HandlerInterceptor chain----->Controller中的handler方法。

    2、HandlerInterceptor接口

      HandlerInterceptor有三个方法,

    1. preHandle:在Controller的handler方法之前执行,返回true时继续执行下一个Handler,若是最后一个Handler,则执行Controller中的方法。返回false时,表示请求终止,不会有任何后续。
    2. postHandle:在Controller的handler方法之后执行,当响应类型为数据流时,即直接向response对象的输出流写入数据时,例如调用response.getWriter.append方法,标注有@ResponseBody的handler。此方法不会执行。
    3. afterCompletion:在请求结束,响应关闭,线程资源被回收之后运行

    3、使用

      使用拦截器有两个步骤:

    1. 自定义HandlerInterceptor接口的实现类,例如TestInterceptor。
    2. 注册HandlerInterceptor,注册的方式有两种,代码方式,在配置文件中配置。

      编写HandlerInterceptor接口的实现类较为简单。只做练习的话,打印几条输出语句即可。

      注册的代码方式:

      实现WebMvcConfigurer接口,重写addInterceptors方法,参数为InterceptorRegistry,它是拦截注册器。代码如下:

    public void addInterceptors(InterceptorRegistry registry) {
    	// 调用InterceptorRegistry的addInterceptor方法
    	// 拦截所有的请求,除login
    	registry.addInterceptor(new TestInterceptor()).
           addPathPatterns("/**").excludePathPatterns("/login");
    }
    

      注册的配置方式:在spring-mvc.xml中配置mvc:interceptors标签

    <mvc:interceptor>
    	<mvc:mapping path="/**"/>
    	<mvc:exclude-mapping path="/login"/>
    	<bean class="interceptor.TestInterceptor"/>
    </mvc:interceptor>
  • 相关阅读:
    LCT 动态树 模板
    [HNOI2010] 物品调度 fsk
    [HNOI2010] 矩阵 matrix
    [HNOI2010] 平面图判定 planar
    [HNOI2010] 公交线路 bus
    [HNOI2017]抛硬币
    [HNOI2010] 弹飞绵羊 bounce
    [HNOI2010] 合唱队 chorus
    [HNOI2017]礼物
    [HNOI2017]大佬
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903087.html
Copyright © 2020-2023  润新知