当前位置: 首页 > 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>

http://www.lryc.cn/news/371697.html

相关文章:

  • 【Python】selenium使用find_element时解决【NoSuchWindowException】问题的方法
  • PTA:7-188 水仙花数
  • HTML静态网页成品作业(HTML+CSS+JS)—— 美食企业曹氏鸭脖介绍网页(4个页面)
  • SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】
  • 人脸匹配——OpenCV
  • 韩顺平0基础学java——第22天
  • 神经网络介绍及教程案例
  • 16个不为人知的资源网站,强烈建议收藏!
  • pandas获取某列最大值的所有数据
  • App UI 风格展现非凡创意
  • rocketmq-5.1.2的dleger高可用集群部署
  • 无线网络与物联网技术[1]之近距离无线通信技术
  • Codeforces Round 952 (Div. 4)
  • spark MLlib (DataFrame-based) 中的聚类算法Bisecting K-Means、K-Means、Gaussian Mixture
  • 天降流量于雀巢?元老品牌如何创新营销策略焕新生
  • 新疆在线测宽仪配套软件实现的9大功能!
  • 考研计组chap3存储系统
  • 杨氏矩阵和杨辉三角的空间复杂度较小的解题思路
  • 【第六篇】SpringSecurity的权限管理
  • 未来工作场所:数字化转型的无限可能
  • Landsat8的质量评估波段的一个应用
  • OpenZeppelin Ownable合约 怎么使用
  • vue3框架基本使用(基础指令)
  • ubuntu20.04设置共享文件夹
  • 三十五、 欧盟是如何对法律政策环境进行评估的?
  • 项目实战--文档搜索引擎
  • 计算机视觉基础课程知识点总结
  • 编译原理:语法分析
  • React 中的 Lanes
  • 【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】线性分类模型损失函数对比