Interceptor 拦截器

news/2024/11/15 11:58:18/文章来源:https://www.cnblogs.com/bobospace/p/18297787

1、拦截器的介绍

  • 拦截器使用场景:
  1. 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
  2. 权限校验:根据用户权限对部分网址进行访问控制,拒绝未经授权的用户访问。
  3. 请求日志:记录请求信息,例如请求地址、请求参数、请求时间等,用于排查问题和性能优化。
  4. 更改响应:可以对响应的内容进行修改,例如添加头信息、调整响应内容格式等。
  • 拦截器和过滤器的简单区别:
  1. 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
  2. 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

2、拦截器的实现

实现拦截器需要实现HandlerInterceptor接口,并且重写preHandlepostHandleafterCompletion,事实上即使不重写也是没问题的。该方法实际上有默认实现。其中preHandle需要一个boolean的返回值。如果返回值true,程序放行。

package com.powernode.Interceptors;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;@Component
public class MyInterceptor1 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor1 preHandle 执行.......");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptor1 postHandle 执行.......");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("MyInterceptor1 afterCompletion 执行.......");}
}

然后我们需要在SpringMVC框架的配置文件,对拦截器进行配置。有两钟方式。

方式一:

  <!--配置拦截器--><mvc:interceptors><bean class="com.powernode.Interceptors.MyInterceptor1"></bean></mvc:interceptors>

方式二:
我的拦截器类名是MyInterceptor1,在这里我们需要把首字母小写。

   <mvc:interceptors><ref bean="myInterceptor1"></ref></mvc:interceptors>

测试:

3、拦截器的高级配置

设置拦截器拦截路径:

    <mvc:interceptors><mvc:interceptor><!--拦截所有路径--><mvc:mapping path="/**"/><!--除 /test 路径之外--><mvc:exclude-mapping path="/test"/><!--拦截器--><ref bean="myInterceptor1"/></mvc:interceptor></mvc:interceptors>

4、多个拦截器执行顺序

Filter、Servlet、Interceptor、Controller的执行顺序:

设置多个拦截器

    <mvc:interceptors><ref bean="myInterceptor2"></ref><ref bean="myInterceptor3"></ref><ref bean="myInterceptor1"></ref></mvc:interceptors>

如果所有拦截器的 preHandle都返回truepreHandle按照排布顺序执行。 postHandleafterCompletion按照和排布顺序相反顺序执行。

只要有一个拦截器preHandle返回false,任何postHandle都不执行。但返回false的拦截器的前面的拦截器按照逆序执行afterCompletion
现在拦截器按照顺序排布,同时让拦截器2的preHandle返回false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/742636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bootstrap-datetimepicker 项目

项目 此项目是bootstrap-datetimepicker 项目 的一个分支,原项目不支持 Time 选择。其它部分也进行了改进、增强,例如load 过程增加了对 ISO-8601 日期格式的支持。文档是拷贝/粘贴字原项目的文档,并且加入了更多细节说明。 别犹豫了,下载下来试试吧 ! 下载 ZIP 包此地址可…

TLScanary:Pwn中的利器

TLScanary:Pwn中的利器 引言:什么是TLScanary?在二进制漏洞利用(Pwn)领域,攻击者面临着层层防护措施的挑战。在安全竞赛(如CTF)和实际漏洞利用中,TLS(线程本地存储)和堆栈保护(stack canary)是常见的防护技术。TLScanary应运而生,它结合了TLS协议与堆栈保护技术,…

JS组件系列——BootstrapTable 行内编辑解决方案:x-editable

转载:http://www.cnblogs.com/landeanfen/p/5821192.html#_label2阅读目录一、x-editable组件介绍 二、bootstrapTable行内编辑初始方案 三、bootstrapTable行内编辑最终方案1、文本框 2、时间选择框 3、下拉框 4、复选框 5、“阴魂不散”的select2四、总结 正文 前言:之前介…

Iceberg metrics导致的问题

一、问题描述 在iceberg rewrite时报错:org.apache.iceberg.exceptions.ValidationException: Cannot commit, found new delete for replaced data file 看信息像是对于要删除的DataFile,有新的DeleteFile作用于它,不应该直接删除DataFile。但是我们很明确并没有DeleteFile…

6. DRF 版本

目录Django DRF 版本1. 使用1.1 URL 传递version参数 Django DRF 版本 1. 使用 rest_framework 的 versioning.py中定义了多种方法,支持不同方式携带version信息, 比如支持url/hostname/namespace中携带并传递version信息1.1 URL 传递version参数 https://127.0.0.1:8000/use…

spark-submit提交任务时执行流程(简单版)

yarn cluster模式提交spark任务 (1)执行脚本提交任务,实际是启动一个SparkSubmit的JVM进程。 (2)SparkSubmit类中的main方法反射调用YarnClusterApplication的main方法。 (3)YarnClusterApplication创建Yarn客户端,然后向yarn服务器发送执行指令:bin/java Application…

回溯-子集型

参考:回溯算法套路①子集型回溯【基础算法精讲 14】 ps:0-1背包也是一种子集型回溯 注意:递归参数中的 i 不是第 i 个, 而是下标大于等于 i 的这部分例题: class Solution: def f1(self, nums):n = len(nums)if n==0:return []ans = []path = []def dfs(i):if i == n…

Springboot按天生成日志文件

原文链接:https://blog.csdn.net/weixin_47798667/article/details/1318469421:首先再yml文件上加上配置 logging: config: classpath:logback-spring.xml2:新建一个logback-spring.xml文件文件内容是如下 <?xml version="1.0" encoding="UTF-8"?&g…

AIGC来了,你的版权还安全吗?

人工智能生成内容(AIGC)是热度居高不下,据Gartner预计,到2025年,AIGC将占全球所有生成数据的10%,以ChatGPT、Stable Diffusion为代表的现象级应用受到强势追捧,AIGC毫无疑问是强有力的生产工具,那如果人类作为创作者被工具抄袭时能够有效反击吗?无法确权和版权争议将是…

音乐相关api

网易云飙升榜 {"sourceUrl": "https://api.vvhan.com/api/wyMusic/飙升榜?type=json","command": "网易云飙升榜","dataType": "json","sendType": "audio","jsonKey": "inf…

显卡欺骗器、锁屏宝的代替品,ToDesk虚拟屏功能完美解决

主机没有显示器?远控电脑需要保持屏幕的高分辨率,但过高容易黑屏? 遇到以上情况,人们常常会使用显卡欺骗器或者锁屏宝来解决,就是让显卡认为连接了一个显示器,方便正常使用电脑。 但是这往往需要额外给电脑上插入设备,如果是突然急用就很难实现了,有没有人帮忙装显卡欺…