Spring MVC 拦截器使用

news2025/3/22 18:51:51

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.coloradmin.cn/o/2319095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车机械钥匙升级一键启动的优点

汽车机械钥匙升级一键启动的优点主要包括: 便捷性:一键启动功能的引入极大地提升了用车便捷性。车主无需翻找钥匙,只需在车辆感应范围内轻触启动键,即可轻松发动汽车。 安全性:移动管家专车专用一键启动系统配备了防…

中小企业如何低成本构建高效专属网络?

对于许多中小企业管理者而言,构建一套安全、灵活且可扩展的专网系统是数字化转型的“必修课”。本文将从实际业务场景出发,拆解企业组网的核心步骤,并提供可落地的实施方案建议,帮助您快速匹配适合自身需求的网络服务商。 一、组网…

【C++】 —— 笔试刷题day_6

刷题day_6,继续加油哇! 今天这三道题全是高精度算法 一、大数加法 题目链接:大数加法 题目解析与解题思路 OK,这道题题目描述很简单,就是给我们两个字符串形式的数字,让我们计算这两个数字的和 看题目我…

pytorch 网络结构可视化Netron安装使用方法(已解决)

首先 要把保存的训练模型 转为onnx格式的文件,然后打开下面的链接,选择刚刚转的onnx文件。 下载 Netron: 您可以访问 Netron 的官方网站 在线使用,或者下载桌面版本。 mnist_cnn_model.onnx 确定后, 2、TensorRT学习…

第六:go 操作 redis-go

Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。 Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外&am…

【蓝桥杯】每天一题,理解逻辑(4/90)【Leetcode 二进制求和】

题目描述 我们解析一下题目 我们可以理解到两个主要信息 给的是二进制的字符串返回他们的和 我们知道,十进制的加减法需要进位,例如:9716是因为91之后进了一位,二进制也是如此,只不过十进制是逢10进1,二…

快速入手-基于Django的mysql配置(三)

Django开发操作数据库更简单,内部提供了ORM框架。比如mysql,旧版本用pymysql对比较多,新的版本采用mysqlclient。 1、安装mysql模块 pip install mysqlclient 2、Django的ORM主要做了两件事 (1)CRUD数据库中的表&am…

docker部署dify

1.安装docker 参考链接 https://ascendking.blog.csdn.net/article/details/136407383 设置docker源 vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "http…

网络安全红蓝对抗实战演练,沉浸式对抗训练场上线!

在网络安全的世界里,没有永恒的盾牌,只有不断磨砺的利剑。近年来,某金融机构因系统漏洞导致千万级用户数据泄露,某制造企业因生产线遭遇勒索攻击被迫停产数日——这些真实案例揭示了一个残酷现实:传统的理论教学已无法…

舞狮表演(dp)

#include <bits/stdc.h> using namespace std; const int N1e35; int main() {int t;cin>>t;while(t--){int n;cin>>n;int a[N][N];for(int i1;i<n;i){for(int j1;j<n;j){int x;cin>>x;if(x&1) a[i][j]1; // 如果金额是奇数&#xff0c;a[i]…

【Qt】Qt + Modbus 服务端学习笔记

《Qt Modbus 服务端学习笔记》 1.因为项目的需要&#xff0c;要写一个modbus通信&#xff0c;csdn上感觉有些回答&#xff0c;代码是人工智能生成的&#xff0c;有些细节不对。我这个经过实测&#xff0c;是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…

【详细解决】pycharm 终端出现报错:“Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

昨天在终端一顿操作后突然打开pycharm时就开始报错&#xff1a; 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 Failed to act…

CXL协议之FM(Fabric Management)解释

CXL协议中的FM功能详解 1. FM的核心作用 FM是CXL&#xff08;Compute Express Link&#xff09;架构中的核心管理实体&#xff0c;负责协调和管理CXL设备之间的通信、资源分配及拓扑结构。其核心功能包括&#xff1a; 设备发现与枚举&#xff1a;识别CXL拓扑中的设备&#x…

Unity URP 实现场景和UI添加后处理

在更新到URP之后&#xff0c;之前内置的渲染管线的那一套后处理已经无法使用&#xff0c;接下来&#xff0c;我们使用URP的内置后处理实现对场景和UI的后处理。 设置UI 如果UI需要使用后处理&#xff0c;在Canvas里&#xff0c;我们要选择Screen Space - Camera&#xff0c;然…

搭建ISCSI传输的配置与管理

前提是&#xff1a; windows server2019设置成桥接模式&#xff0c;因为要让虚拟机和主机设置成一个网段&#xff0c;才能通过网络进行新建虚拟磁盘。 1.添加ISCSI角色 安装位置 选择文件和存储服务----------文件和iscsl 服务------------iscsl目标服务器 2.右上角点击任务&a…

Java 设计模式之享元模式(Flyweight Pattern)

享元模式&#xff08;Flyweight Pattern&#xff09; 是一种 结构型设计模式&#xff0c;旨在通过共享对象来有效支持大量细粒度对象的复用&#xff0c;从而减少内存占用和提高性能。其核心是 分离内部状态&#xff08;可共享&#xff09;与外部状态&#xff08;不可共享&#…

C#入门学习记录(三)C#中的隐式和显示转换

C#类型转换&#xff1a;隐式与显式转换的机制与应用 在C#的强类型体系中&#xff0c;数据类型转换是实现数据交互和算法逻辑的基础操作。当数值类型范围存在包含关系&#xff0c;或对象类型存在继承层次时&#xff0c;系统通过预定义的转换规则实现类型兼容处理。隐式转换&…

Rk3568驱动开发_设备树_9

什么是设备树&#xff1f; 以我目前的理解&#xff0c;设备树更像日常生活中用的地图&#xff0c;用户能根据地图去寻找到相应位置 设备树也是如此它描述了硬件设备的连接关系和配置信息&#xff0c;供 CPU&#xff08;或者更准确地说&#xff0c;是操作系统内核&#xff09;…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接&#xff1a;从零开始的DeepSeek微调训练实战&#xff08;SFT&#xff09; 微调参考示例&#xff1a;由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…

【AI News | 20250320】每日AI进展

AI Repos 1、servers 该仓库提供详细入门指南&#xff0c;用户可通过简单步骤连接Claude客户端&#xff0c;快速使用所有服务器功能。此项目由Anthropic管理&#xff0c;展示MCP的多样性与扩展性&#xff0c;助力开发者为大语言模型提供安全、可控的工具与数据访问。 2、awe…