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

SpringMVC的拦截器

SpringMVC拦截器用于拦截对控制器的方法,当用户需要访问自定义控制器时,首先执行拦截器,只有拦截器放行后才允许继续访问目标控制。

拦截器的实现:1)创建拦截器类- 让MyInterceptor类实现了HandlerInterceptor接口,使该类成为一个拦截器类- 拦截器类需要重写接口中的三个方法:(1)preHandle:该方法在控制器执行前执行(2)postHandle:该方法在控制器执行后执行(3)afterCompletion:该方法在上面两个方法都执行结束后执行,用于清理所占用的资源2)配置拦截器- 在web容器配置类中配置- 重写public void addInterceptors(InterceptorRegistry registry) 方法并在方法中添加新拦截器的注册

在昨天的基础上,我们创建了一个拦截器类MyInterceptor

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;/*** 自定义拦截器* 当一个类实现了HandlerInterceptor接口后,则该类就成了一个拦截器类* 拦截器类需要重写接口中的三个方法*/
public class MyInterceptor implements HandlerInterceptor {/*** 该方法在执行控制器执行* @param request* @param response* @param handler* @return true表示放行,继续执行其后的拦截器或控制前*          false表示不放行,不执行其后的拦截器或控制前* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("拦截器MyInterceptor---->preHandle方法被执行......");return true;}/*** 在执行控制器之后执行* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("拦截器MyInterceptor---->postHandle方法被执行......");}/*** 在最后执行,当preHandle和postHandle都执行结束后执行* 该方法主要用于清理资源* @param request* @param response* @param handler* @param ex* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("拦截器MyInterceptor---->afterCompletion方法被执行......");}
}

在WebMVC配置类中配置已定义好的拦截器

    /*** 配置已定义好的拦截器* @param registry  拦截器的注册器*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册新的拦截器registry.addInterceptor(new MyInterceptor())//注册拦截器/*** /**:表示拦截所有对控制器的访问(默认)* /test/*:拦截所有对test目录下控制器的访问* "/test/test1":只拦截某个具体的控制器*/.addPathPatterns("/test/**")//设置拦截器的拦截路径,如果不配置拦截所有对控制器的方法.order(1);//配置拦截器的执行顺序的(优先级),数字越小优先级越高//如果还有别的拦截器可以接着写
/*      registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**").order(2);   */}

 运行结果:

过滤器、拦截器、AOP其作用的地方: 

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

相关文章:

  • Mermaid流程图可视化系统:基于Spring Boot与Node.js的三层架构实现
  • gradio作为原型工具
  • 专业餐饮直播如何激发食欲与购买欲?
  • zabbix的PostgreSQL监控模板中文环境采集问题处理
  • 【BFS】P7555 [USACO21OPEN] Maze Tac Toe S|普及+
  • Java向量化
  • C语言使用GmSSL库实现sm3、sm4算法
  • SH3001六轴传感器应用(二)(IIC驱动开发)
  • Linux---编辑器vim
  • JAVA结合AI
  • Linux 硬盘分区管理
  • 工程化(一):Vite vs. Webpack:从“打包”到“服务”,构建工具的范式转移
  • 鸿蒙系统下的动态负载均衡实战:让分布式任务调度更智能
  • 灵敏度,精度,精确度,精密度,精准度,准确度,分辨率,分辨力——概念
  • 谈谈对反射的理解?
  • AJAX 解析与高频问题
  • 在 MEF 中处理多个 Tab 页对应同一模块的不同实例
  • python进程、线程、协程
  • 第二十三天(数据结构:链表补充【希尔表】)
  • 海外商城 app 系统架构分析
  • 电子电气架构 --- 软件项目变更管理
  • Corrosion2靶机攻略
  • 第七章 愿景12 小萍分享《人性的弱点》
  • 大模型推理引擎总结
  • AIGC(生成式AI)试用 35 -- 用AI解析句子结构
  • 力扣-最大单词长度乘积
  • 守护数字核心:主机安全的重要性与全方位防护指南
  • .NET 如何实现ChatGPT的Stream传输
  • HCLP--ospf综合实验
  • Qt大数据监控平台