Spring MVC 拦截器使用

embedded/2025/3/22 1:27:11/

javaweb过滤器和springmvc拦截器:

拦截器的概念


拦截器使用

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

public class GlobalExceptionHandler implements HandlerInterceptor {// if( ! preHandler()){return;}// 在处理请求的目标 handler 方法前执行// 登录保护,权限处理等@Overridepublic 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报错不执行!// 因为已经执行完毕,所以没有拦截机制,也不会返回布尔类型// 一般是对结果进行处理,比如结果脱敏,敏感词汇检查@Overridepublic 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报错,会报异常@Overridepublic 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配置中添加拦截器

细化拦截

默认拦截全部请求

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

精准拦截地址 

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

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

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

排除拦截

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

@Overridepublic 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.ppmy.cn/embedded/174563.html

相关文章

某地基坑及周边建筑物自动化监测项目

1. 项目简介 某拟建项目规划用地面积23013.3m,总建筑面积66116.67m。地下室(一层)总建筑面积15140m。项目主要建(构)筑物为:1#、2#、3#高层住宅、1#~8#商铺、一层地下室等,桩筏基础。基坑周长约 725m,面积约16612m 开挖深度4.5-6.2m&#xf…

基于腾讯云HAI-CPU一体化部署DeepSeek打造AI烹饪助手应用

一、智慧图书馆建设背景与需求 (一)智慧图书馆建设的时代背景 在信息技术日新月异的大背景下,数字化浪潮以汹涌之势席卷了各个领域,图书馆作为信息资源的重要集散地,也迎来了前所未有的变革。随着社会对知识和信息需…

Java中HashMap的实现原理及面试回答参考

Java中HashMap的实现原理及面试回答参考 HashMap 是 Java 中最常用的数据结构之一,它基于哈希表实现,提供了高效的键值对存储和查找功能。本文将详细分析 HashMap 的实现原理,并提供一个面试回答参考,帮助你更好地理解和应对面试中的相关问题。 1. HashMap 的基本结构 Ha…

五子棋小游戏-简单开发版

一、需求分析 开发一个基于 Pygame 库的五子棋小游戏,允许两名玩家在棋盘上轮流落子,当有一方达成五子连珠时游戏结束,显示获胜信息,并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 : 显示一个 15x15 的五子棋…

安卓edge://inspect 和 chrome://inspect调试移动设备上的网页

edge://inspect 和 chrome://inspect 是用于调试浏览器中运行的网页和移动设备上的网页的工具。这两个工具分别属于 Microsoft Edge 和 Google Chrome 浏览器。以下是它们的详细介绍: chrome://inspect 如果是直接使用数据线调试,则只需要执行下面的第一…

Vulnhub HarryPotter系列靶机合集

HarryPotter:Aragog(1.0.2) HarryPotter系列靶机中第一台,需要找到隐藏的两个horcruxes(魂器)。 具体流程 1、主机发现 nmap 192.168.56.0/24 -Pn 攻击机ip:192.168.56.109 目标机ip:192.168.56.114 2、web http://192.168.56.114&…

python-56-基于Vue和Flask进行前后端分离的项目开发示例实战

文章目录 1 创建Vue前端项目1.1 运行demo1.2 实现需求2 flask部署上述dist(前后端未分离)2.1 代码app.py2.2 运行访问3 nginx部署(前后端分离)3.1 nginx前端服务3.3.1 windows安装nginx3.3.2 修改nginx.conf配置文件3.3.3 启动nginx3.3.3 停止nginx3.2 启动后端服务3.2.1 app.p…

握手问题 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

握手问题 题目来源 第十五届蓝桥杯大赛软件赛省赛C/C 大学 B 组 原题链接 蓝桥杯 握手问题 问题描述 问题分析 算法思路分析: 问题描述: 总共有 50 人参加会议,每个人需要与其他 49 人握手一次。但有 7 个人彼此之间没有握手&#xff…