彻底搞清拦截器和过滤器的区别

article/2025/10/7 17:27:25

一、引言
本来想记录一下关于用户登陆和登陆之后的权限管理、菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序和区别。关于Interceptor解决权限和菜单管理的问题,在放在下一篇写吧,就酱紫。

二、区别
1、过滤器(Filter)
首先说一下Filter的使用地方,我们在配置web.xml时,总会配置下面一段设置字符编码,不然会导致乱码问题:

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encoding</filter-name>
    <servlet-name>/*</servlet-name>
</filter-mapping>

配置这个地方的目的,是让所有的请求都需要进行字符编码的设置,下面来介绍一下Filter。

(1)过滤器(Filter):它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等。

2、拦截器(Interceptor)
拦截器的配置一般在SpringMVC的配置文件中,使用Interceptors标签,具体配置如下:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.scorpios.atcrowdfunding.web.LoginInterceptor"></bean>
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.scorpios.atcrowdfunding.web.AuthInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

(2)拦截器(Interceptor):它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
 

三、总结
对于上述过滤器和拦截器的测试,可以得到如下结论:
(1)、Filter需要在web.xml中配置,依赖于Servlet;
(2)、Interceptor需要在SpringMVC中配置,依赖于框架;
(3)、Filter的执行顺序在Interceptor之前,具体的流程见下图;

è¿éåå¾çæè¿°

(4)、两者的本质区别:拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

 

 

喜欢本文的朋友们,欢迎关注微信公众号“Java面试达人”,收看更多精彩内容


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

相关文章

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

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

拦截器与过滤器的区别

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

拦截器和过滤器的区别

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

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

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

过滤器和拦截器的区别

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

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

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

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

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

Nessus在线更新教程

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

弱点扫描工具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升级&#xff08;破解&#xff09;方法kali 进行升级(初始化完成后之后发现还是无法破解成功&#xff0c;看来kali系统无法使用这种方式进行破解了) 启动nessus服务 进入kali系统&#xff0c;终端输入如下命令&#xff…

Nessus学习

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

Nessus安全测试工具使用教程

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

Nessus部署及简单使用

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

Nessus 使用学习

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

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

一、介绍、下载 适用版本&#xff1a;Windows 10 64位 Nessus版本&#xff1a;8.13.1 插件&#xff1a;all_2.0_20220618.tar 即2022年6月更新。 资源下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Q_ywVkNqcu9WH_OJH03-iw 提取码&#xff1a;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登录 在浏览器中访问&#xff1a;https://{服务器IP}:8834 例如访问&#xff1a;https://10.1.1.191:8834/ 输入你注册的账号密码进行登录&#xff0c;例如&#xff1a;nessus_casb/liaxx&#xff0c;进入主页…

Nessus详细安装教程(Windows版)

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

kali-linux中安装Nessus详细教程

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