• Spring MVC框架:第十章:拦截器


    拦截器

    拦截器最典型的用法是检查用户是否登录,登录后可以执行目标handler方法,未登录则跳转到登录页面。这样的操作要是在每个拦截器内部来写就太麻烦了,统一提取到拦截器中是明智之举。
    1.HandlerInterceptor接口
    ①preHandle()方法

    签名:boolean preHandle(HttpServletRequest, HttpServletResponse, Object) 在执行目标handler方法之前执行,如果返回true,则继续执行后续拦截器和目标handler方法;如果返回false则不执行。注意:返回false时最好借助转发或重定向等方式为客户端提供一个响应页面。
    ②postHandle()方法

    签名:void postHandle(HttpServletRequest, HttpServletResponse, Object, ModelAndView) 在执行目标handler方法之后、渲染视图之前执行。
    ③afterCompletion()方法

    在渲染视图之后、返回响应之前执行。
    2.HandlerInterceptorAdapter类

    实现HandlerInterceptor接口需要把所有抽象方法都实现,而继承HandlerInterceptorAdapter类则可以有选择的重写需要的方法,更加便捷,推荐使用。

    在这里插入图片描述

    3.配置方式
    ①拦截所有请求

    <mvc:interceptors>
        <bean class="com.interceptor.FirstInterceptor"/>
        <bean class="com.interceptor.SecondInterceptor"/>
    </mvc:interceptors>
    

    ②精确指定拦截的请求

    <mvc:interceptors>
        <bean class="com.interceptor.FirstInterceptor"/>
        <bean class="com.interceptor.SecondInterceptor"/>
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <mvc:exclude-mapping path="/specailPath"/>
            <bean class="com.interceptor.SpecialInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    

    4.多个拦截器的执行顺序

    ①按正序依次调用preHandle()方法 ②执行目标handler方法 ③按反序调用postHandle()方法 ④按反序调用afterCompletion()方法

  • 相关阅读:
    HTML5 中的Nav元素详解
    Gevent中信号量的使用
    MemCache缓存multiget hole详解
    MemCache中的内存管理详解
    Php中的强制转换详解
    Python中类的特殊方法详解
    MemCache的LRU删除机制详解
    AngularJS事件绑定的使用详解
    Php数据类型之整型详解
    HTML基础知识
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812066.html
Copyright © 2020-2023  润新知