• SpringMVC的拦截器(Interceptor)


    拦截器简介

    • SpringMVC的拦截器Interceptor,主要是对Controller资源访问时进行拦截的基本操作的技术,当然拦截后可以进行权限控制,功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter,他们之间的区别如下图所示
      • Filter技术Interceptor
        技术范畴JavaWeb原生技术SpringMVC框架技术
        拦截/过滤范畴对所有请求都可以过滤,包括如何Servlet、JSP、其它资源等只有进行了SpringMVC管理的范畴的才拦截,主要拦截对于Controller的请求
        执行时机早于任何Servlet执行

        晚于DispatcherServlet执行

      • 实现了HandlerInterceptor接口,且被Spring管理的Bean都是拦截器
      • 方法名参数返回值解释
        preHandleHttpServletRequest request
        HttpServletResponse response
        Object handler
        boolean在请求处理之前被调用。返回值表示是否继续执行后续的拦截器和处理器(如果返回 true)或中断请求处理(如果返回 false)。可用于登录验证、权限检查等前置处理。
        postHandle

        HttpServletRequest request

        HttpServletResponse response

        Object handler

        ModelAndView modelAndView

        请求处理之后、视图渲染之前被调用。可以在该方法中对请求处理结果进行修改或增加一些公共数据供视图渲染使用。Handler是拦截到的Controller方法处理器,modelAndView是返回的模型视图对象
        afterCompletion

        HttpServletRequest request

        HttpServletResponse response

        Object handler

        Exception ex

        在整个请求完成之后被调用,包括视图渲染完毕。可用于进行一些清理工作,如资源回收、记录请求日志等。Handler是拦截到的Controller方法处理器,ex是异常对象

    拦截器快速入门

    • 创建一个拦截器类实现HandlerInterceptor接口,然后在SpringMVC配置文件中对接口类进行注册
    • 创建拦截器实现类
        1. package com.example.Interceptor;
        2. import org.springframework.web.servlet.HandlerInterceptor;
        3. import org.springframework.web.servlet.ModelAndView;
        4. import javax.servlet.http.HttpServletRequest;
        5. import javax.servlet.http.HttpServletResponse;
        6. public class Interceptor01 implements HandlerInterceptor {
        7. @Override
        8. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        9. System.out.println("preHandler...");
        10. return true;
        11. }
        12. @Override
        13. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        14. System.out.println("postHandler....");
        15. }
        16. @Override
        17. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        18. System.out.println("afterCompletion....");
        19. }
        20. }
      • 配置文件

    拦截器执行顺序

    • 当有多个拦截器配置在SpringMVC框架的配置文件中时,执行顺序就是配置顺序,拦截器中方法具体的执行顺序如下图
        • 上述是preHandler结果返回的都是true的运行顺序的结果
        • 上述某一个preHandler返回结果为false时。

    拦截器执行原理 

    当客户端发出请求之后,SpringMVC框架通过处理器映射器(HandlerMapping)将请求路径与对应资源匹配起来,原先是通过请求地址匹配到Conreoller控制器,现在再加入Interceptror后,在请求到控制器之前,处理器映射器(HandlerMapping)会根据拦截器的地址来处理对应的请求,(一个请求可能被多个拦截器所拦截,但是一个请求只能被一个控制器所处理),然后RequestMappingHandlerMapping将请求可以访问的资源进行封装为HandlerExecutionChain进行返回。然后再执行拦截器中的方法。

  • 相关阅读:
    docker
    crypto:变异凯撒
    第10章 MySQL(一)
    “可持续计划”,京东与华为双向奔赴背后的“三方共赢”
    Win32 COLORREF、RGB、获取颜色分量
    远程仓库地址改变后更换url
    ES6学习系列
    【考研英语词汇训练营】Day 16 —— bankrupt,remain,regulate,construct,reflect
    Kotlin MVVM之Jetpack系列ViewModel、LiveData的简单使用
    利用Pinpoint搭建全链路监控系统
  • 原文地址:https://blog.csdn.net/weixin_64939936/article/details/133844769