Spring拦截器和过滤器的区别及详解

article/2025/10/7 18:08:11

拦截器和filter的功能都是拦截,filter是在servlet前执行的,拦截器拦截的是Spring MVC定义的概念。过滤器中包含拦截器,发送一个请求,先进行过滤器处理,看程序是否受理该请求。过滤器放过后,程序中的拦截器再进行处理。

 1. 拦截器(Interceptor)

拦截器它是链式调用,一个应用中可以同时存在多个拦截器Interceptor,一个请求也可以触发多个拦截器,而每个拦截器的调用会依据它的声明顺序依次执行。spring中拦截器主要分两种:HandlerInterceptor和MethodInterceptor。

1.1 HandlerInterceptor拦截方式--HandlerInterceptor是springMVC中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。其工作原理是当请求来时先进性预处理。HandlerInterceptoer拦截的是请求地址,所以针对请求地址做一些验证、预处理等操作比较合适

1.1.1 下面用代码进行展示:编写一个简单的拦截器处理类,请求的拦截是通过HandlerInterceptor 来实现

/*** preHandle() :这个方法将在请求处理之前进行调用。如果该方法的返回值为false ,将视为当前请求结束,不仅自身的拦截器会失效,还会导致其他的拦截器也不再执行。* postHandle():只有在 preHandle() 方法返回值为true 时才会执行。会在Controller 中的方法调用之后,DispatcherServlet 返回渲染视图之前被调用。* afterCompletion():只有在 preHandle() 方法返回值为true 时才会执行。在整个请求结束之后, DispatcherServlet 渲染了对应的视图之后执行。*/
@Component
public class MyControllerInterceptor implements HandlerInterceptor {/*** 在controller调用之前执行*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {String string1 = request.getParameter("string1");if(string1.equals("123")){return true;}System.out.println(request.getRequestURI()+"开始执行");return false;}/*** 在controller调用中执行*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception {}/*** 在controller调用后执行*/public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println(request.getRequestURI()+"执行结束");}
}

1.1.2 将自定义好的拦截器处理类进行注册,并通过addPathPatterns、excludePathPatterns等属性设置需要拦截或需要排除的 URL。 

@Configuration
public class IntercepterConfig implements WebMvcConfigurer {@Autowiredprivate MyControllerInterceptor myControllerInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//addPathPatterns用于添加拦截路径    /**表示拦截所有的路径//excludePathPatterns用于添加不拦截的路径registry.addInterceptor(myControllerInterceptor).addPathPatterns("/test1/**");}//此方法用于配置静态资源路径@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/mapper/");}
}

1.2 MethodInterceptor拦截方式--MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,常用AOP。这里就不过多的介绍了。

2. 过滤器(filter)

过滤器的配置,直接实现Filter接口,也可以通过@WebFilter注解实现对特定URL拦截

下面用代码进行展示:

@Component
public class MyFilter implements Filter {/*** init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。* doFilter() :容器中的每一次请求都会调用该方法, FilterChain(放行) 用来调用下一个过滤器 Filter。* destroy(): 当容器销毁过滤器实例时调用该方法,在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次。*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Filter 前置");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter 处理中");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {System.out.println("Filter 后置");}
}

过滤器和拦截器的区别总结:

(1)拦截器是基于java的反射机制,过滤器是基于函数回调。
(2)Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
(3)Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。


http://chatgpt.dhexx.cn/article/ReFpqiw6.shtml

相关文章

拦截器与过滤器的区别

文章目录 一、二者理解过滤器(Filter)拦截器(Interceptor) 二、拦截器与过滤器的区别区别: 三、拦截器与过滤器的触发时机拦截器与过滤器触发时机不一样 四、使用场景五、图解 一、二者理解 过滤器(Filter…

拦截器和过滤器的区别

1、实现原理不同 过滤器和拦截器底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。 2、使用范围不同 我们看到过滤器 实现的是 javax.servlet.Filter 接口,而这个接口是…

过滤器 和 拦截器的 6个区别,别再傻傻分不清了

周末有个小伙伴加我微信,向我请教了一个问题:老哥,过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊? 听到题目我的第一感觉就是:简单! 毕竟这两种工具开发中用到的频率都相当高,应用起来也…

过滤器和拦截器的区别

文章目录 一、拦截器和过滤器的区别1、过滤器1、实现方式2、应用场景 2、拦截器1、实现方式2、应用场景 总结 一、拦截器和过滤器的区别 1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也…

过滤器和拦截器有什么区别?

过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差…

面试篇-Spring 拦截器和过滤器的区别?

1、实现原理不同 过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。 2、使用范围不同 我们看到过滤器 实现的是 javax.servlet.Filter 接口,而这个接…

Nessus在线更新教程

前言:在线更新Nessus需要科学上网,没有工具无法更新。 1. 设置更新策略 这里选:更新所有的组件、频率选:每天,就可以 2. 检查是否有更新 3. 打开梯子,将梯子设置为全局模式 4. cmd命令行,进…

弱点扫描工具NESSUS详细教程

NESSUS • 家庭版 • 免费 • 专业版 • 收费、无限的并发连接 • 下载 • http://www.tenable.com/products/nessus/select-your-operating-system • 安装 • dpkg -i • 安装路径:/opt/nessus • 启动服务 • systemctl start nessusd.service • 管理地址 • https://12…

NESSUS使用笔记

Nessus 使用记录 启动nessus服务Nessus更新插件教程win10升级(破解)方法kali 进行升级(初始化完成后之后发现还是无法破解成功,看来kali系统无法使用这种方式进行破解了) 启动nessus服务 进入kali系统,终端输入如下命令&#xff…

Nessus学习

攻击主机: Kali 192.168.11.106 靶机:windows server 2008 r2 192.168.11.134 x64 32位 nessus 实验原理: 利用漏洞扫描器能够自动应用漏洞扫描原理,对目标主机安全漏洞进行检测,附带识别主机漏洞的特征库的功能&…

Nessus安全测试工具使用教程

Nessus安全测试工具使用教程 1.创建 New Scan扫描按钮 2.选择扫描策略 3.创建扫描成功 4.扫描结果

Nessus部署及简单使用

01 Nessus 简介 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该机构电脑系统的软件。Nessus号称是世界上最流行的漏洞扫描程序,通常包括成千上万的最新的漏洞,各种各样的扫描选项,及易于使用的…

Nessus 使用学习

在看招聘软件的时候注意到有的招聘要求里写着会用 Nessus 这个软件,于是我好奇就下了这个软件。 在使用的过程中发现这也是个非常强大的渗透软件。(总感觉自己有好多东西没学) 1. 安装 在这里我使用的是 Windows 版本。安装可以说是非常简…

Windows版Nessus漏洞扫描器安装与使用

一、介绍、下载 适用版本:Windows 10 64位 Nessus版本:8.13.1 插件:all_2.0_20220618.tar 即2022年6月更新。 资源下载: 链接:https://pan.baidu.com/s/1Q_ywVkNqcu9WH_OJH03-iw 提取码:qsbo 二…

1 | Nessus使用

目录 1 安装1.1 下载地址1.2 点击【Connent via SSL】1.3 选择【Nessus Essentials】1.4 填写注册信息1.5 下载所需要的组件1.6 nessus登陆页面 2 Nessus模块2.1 Host Discovery2.2 Basic Network Scan2.3 Advanced Scan2.4 Advanced Dynamic Scan2.5 Malware Scan2.6 Web Appl…

windows10安装nessus

01 安装nessus 01 安装nessus 02 获取验证码 02 离线安装拓展包 01 找到nessus的快捷方式 02 找到nessus 程序安装目录 03 复制拓展包 04 cmd更新插件 05 刷新nessus 06 登录成功

渗透测试技术_Nessus工具(二) _漏洞扫描工具 Nessus的使用教程

漏洞扫描工具 Nessus的使用教程 1、Nessus使用教程 1.1、Nessus登录 在浏览器中访问:https://{服务器IP}:8834 例如访问:https://10.1.1.191:8834/ 输入你注册的账号密码进行登录,例如:nessus_casb/liaxx,进入主页…

Nessus详细安装教程(Windows版)

1.官网下载安装包:https://www.tenable.com/downloads/nessus?loginAttemptedtrue 2.获取activation code:https://www.tenable.com/products/nessus/nessus-essentials (名字可以随便填,邮箱要填自己可以收到邮件的)…

kali-linux中安装Nessus详细教程

一、下载Nessus Nessus是工业界使用较为广泛的产品。登录官网,下载对应版本的nessus框架安装包 https://www.tenable.com/downloads/nessus?loginAttemptedtrue (建议直接在kali中利用firefox浏览器下载,否则需要从真实机拖进虚拟机中&…

Nessus破解教程

Nessus 最新版破解教程 0x01 Nessus 简介0x02 Nessus 下载0x03 Nessus 安装0x04 更新漏洞库0x05 Nessus 破解0x06 Nessus 使用0x07 注意事项参考文章 0x01 Nessus 简介 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该…