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

SpringMVC:拦截器(Interceptor)

1. 简介

拦截器(Interceptor)类似于过滤器(Filter) 

Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截,可以对请求和响应进行一些特定的处理。拦截器可以用于很多场景下:

1. 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
2. 权限校验:根据用户权限对部分网址进行访问控制,拒绝未经授权的用户访问。
3. 请求日志:记录请求信息,例如请求地址、请求参数、请求时间等,用于排查问题和性能优化。
4. 更改响应:可以对响应的内容进行修改,例如添加头信息、调整响应内容格式等。

拦截器和过滤器的区别在于它们的作用层面不同。

* 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
* 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

 

 2. 定义拦截器

实现HandlerInterceptor接口 选择性实现preHandle、postHandle、afterCompletion方法

* preHandle:处理器方法调用之前执行
  只有该方法有返回值,返回值是布尔类型,true放行,false拦截。
* postHandle:处理器方法调用之后执行
* afterCompletion:渲染完成后执行 

public class Interceptor1 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle执行啦");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle执行啦");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion执行啦");}
}

 3. 配置拦截器

方式一: 要在springmvc.xml中导入对应的包进行扫描

    <!--配置拦截器,基本方式:基于xml文件配置注意:默认对所有请求进行拦截--><mvc:interceptors><!--第一种方式,导入全类名--><bean class="com.itgyl.springmvc.interceptors.Interceptor1"></bean></mvc:interceptors>

方式二:基于注解实现

    <!--配置拦截器,基本方式:基于xml文件配置注意:默认对所有请求进行拦截--><mvc:interceptors><!--第二种方式,基于注解自动装配--><ref bean="interceptor1"></ref></mvc:interceptors>
@Component
public class Interceptor1 implements HandlerInterceptor {

4. 高级配置

     <!--拦截器高级配置--><mvc:interceptors><mvc:interceptor><!--对所有路径进行过滤--><mvc:mapping path="/**"/><!--除了该路径不过滤--><mvc:exclude-mapping path="/ok"/><ref bean="interceptor1"></ref></mvc:interceptor></mvc:interceptors>

相关文章:

  • Python | 排队取奶茶
  • 老旧机子装LINUX——xubuntu
  • 自制植物大战僵尸:HTML5与JavaScript实现的简单游戏
  • JavaScript入门宝典:核心知识全攻略(下)
  • RabbitMQ怎么保证可靠性
  • [C#]使用OpenCvSharp图像滤波中值滤波均值滤波高通滤波双边滤波锐化滤波自定义滤波
  • 国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德
  • 数据结构与算法笔记:基础篇 - 散列表(下):为什么散列表和链表经常会一起使用?
  • linux flask | 接口保持在后台一直运行、python后端接口长期调用、python后台持续运行方法、python提供后端接口
  • 2024上海初中生古诗文大会倒计时4个多月:单选题真题和独家解析
  • 使用亮数据代理IP爬取PubMed文章链接和邮箱地址
  • 常见八大排序(纯C语言版)
  • Vue2工程化
  • python的视频处理FFmpeg库使用
  • 深入解析MongoDB中的锁机制
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • (三)从jvm层面了解线程的启动和停止
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CentOS6 编译安装 redis-3.2.3
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6系统学习----从Apollo Client看解构赋值
  • Git的一些常用操作
  • HTML5新特性总结
  • Laravel5.4 Queues队列学习
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • miaov-React 最佳入门
  • mockjs让前端开发独立于后端
  • mongodb--安装和初步使用教程
  • node和express搭建代理服务器(源码)
  • Vultr 教程目录
  • 从重复到重用
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 利用jquery编写加法运算验证码
  • 深度学习入门:10门免费线上课程推荐
  • 使用parted解决大于2T的磁盘分区
  • 数据仓库的几种建模方法
  • 1.Ext JS 建立web开发工程
  • k8s使用glusterfs实现动态持久化存储
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • (1)无线电失控保护(二)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (12)Linux 常见的三种进程状态
  • (c语言+数据结构链表)项目:贪吃蛇
  • (PySpark)RDD实验实战——求商品销量排行
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)事件系统
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)拼包函数及网络封包的异常处理(含代码)