当前位置: 首页 > news >正文

Spring MVC 拦截器使用

javaweb过滤器和springmvc拦截器:

拦截器的概念


拦截器使用

1/创建拦截器类,类中实现  handler执行前,执行后与渲染视图后的具体实现方法 

public class GlobalExceptionHandler implements HandlerInterceptor {

    // if( ! preHandler()){return;}
    // 在处理请求的目标 handler 方法前执行
    // 登录保护,权限处理等
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler);
        System.out.println("Process01Interceptor.preHandle");
         
        // 会拦截请求,处理内容return true:则放行请求
        // 返回false:不放行
        return true;
    }
 
    // 在目标 handler 方法之后,handler报错不执行!
    // 因为已经执行完毕,所以没有拦截机制,也不会返回布尔类型
    // 一般是对结果进行处理,比如结果脱敏,敏感词汇检查
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", modelAndView = " + modelAndView);
        System.out.println("Process01Interceptor.postHandle");
    }
 
    // 渲染视图之后执行(最后),一定执行!
    // handler报错,会报异常
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", ex = " + ex);
        System.out.println("Process01Interceptor.afterCompletion");
    }
}

2/springmvcConfig配置中添加拦截器

细化拦截

默认拦截全部请求

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler());
    }

精准拦截地址 

路径可以设置多个,中间 , 间隔

支持精准路径,也支持模糊路径  /*    /**   /user/*    */user 等等均可 

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/DATA");
    }

排除拦截

注:排除拦截的对象应该在拦截的范围内 

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/*").excludePathPatterns("/USERDATA");
        // registry.addInterceptor(new GlobalExceptionHandler());
    }

多个拦截器的执行顺序

执行顺序与filter类似,优先级高的在外层,优先级低的在内层。

具体描述:

1. preHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置顺序调用各个 preHandle() 方法。
2. postHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 postHandle() 方法。
3. afterCompletion() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 afterCompletion() 方法。

http://www.dtcms.com/a/80491.html

相关文章:

  • 大模型详细配置
  • 人工智能之数学基础:线性方程组求解的得力助手——增广矩阵
  • HarmonyOS Next~鸿蒙系统架构设计解析:分层、模块化与智慧分发的技术革新
  • DeDeCMS靶场攻略
  • pytest的测试报告allure
  • MongoDB 配合python使用的入门教程
  • 微软产品的专有名词和官方视频教程
  • 柔性PZT压电薄膜触觉传感器在人形机器人的应用
  • Android Launcher3终极改造:全屏应用展示实战!深度解析去除Hotseat的隐藏技巧
  • 如何设计大模型意图识别?
  • 学习笔记|arduino uno r3|DS1307时钟芯片|Atmega328P| 设置时间|读取时间|无源晶振:DS1307时钟芯片实验
  • 2025 使用docker部署centos7容器并且需要centos7容器能通过ssh登录SSH 登录的CentOS7容器
  • Linux CentOS7 安装 ffmpeg教程
  • 【总结】常用API架构类型
  • C++异常处理时的异常类型抛出选择
  • 2021-06-15 C逆序存入数组的元素
  • 韩顺平 一周学会Linux | Linux 实操篇-定时任务调度
  • 使用C#创建安装Windows服务程序
  • 第一个Spring程序基于Spring6
  • ROS从小白到入门:知识点速通与面试指南
  • CatFlag 原理
  • 密码学(Public-Key Cryptography and Discrete Logarithms)
  • Docker 部署 XXL-JOB
  • 粘包半包以及Netty的解决办法
  • HCITool 的详细介绍、安装指南及使用说明
  • 合批Batching
  • MySQL 中利用 mysql.help_topic 实现行转列的深入剖析
  • 物理标签与逻辑标签的区别
  • 第七节 MATLAB数据类型
  • Pytorch使用手册—自定义 C++ 和 CUDA 扩展(专题五十二)