过滤器和拦截器的区别

article/2025/10/7 18:57:59

文章目录

  • 一、拦截器和过滤器的区别
    • 1、过滤器
      • 1、实现方式
      • 2、应用场景
    • 2、拦截器
      • 1、实现方式
      • 2、应用场景
  • 总结


一、拦截器和过滤器的区别

1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。

3、过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射

4、Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。

5、Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。

6、Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
在这里插入图片描述
最简单明了的区别:
1.过滤器可以修改request,而拦截器不能
2.过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境
3.拦截器可以调用IOC容器中的各种依赖,而过滤器不能
4.过滤器只能在请求的前后使用,而拦截器可以详细到每个方法
调用方法流程如下:
在这里插入图片描述

1、过滤器

1、实现方式

1.使用spring boot提供的FilterRegistrationBean注册Filter
定义Filter:

public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("MyFilter");}@Overridepublic void destroy() {Filter.super.destroy();}
}

注册Filter:

@Slf4j
@Order(1)
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("-----------------------MyFilter");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {Filter.super.destroy();}

2.使用原生servlet注解定义Filter

@WebFilter(filterName = "LoginFilter" ,urlPatterns = "/*")
@Slf4j
@Order(2)
public class LoginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("进入过滤器init");Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("进入过滤器"+servletRequest.getRemoteAddr()+"|"+servletRequest.getRemoteHost()+"|"+servletRequest.getLocalPort()+"|"+servletRequest.getServerPort());filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {log.info("进入过滤器destroy");Filter.super.destroy();}

这里直接用@WebFilter就可以进行配置,同样,可以设置url匹配模式,过滤器名称等。这里需要注意一点的是@WebFilter这个注解是Servlet3.0的规范,并不是Spring boot提供的。除了这个注解以外,我们还需在启动类中加另外一个注解:@ServletComponetScan,指定扫描的包。

2、应用场景

1)过滤敏感词汇(防止sql注入)
2)设置字符编码
3)URL级别的权限访问控制
4)压缩响应信息

2、拦截器

1、实现方式

1.自定义拦截器

@Slf4j
public class AuthInterceptor implements HandlerInterceptor {@Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {log.info("preHandle");String clientIP = ServletUtil.getClientIP(httpServletRequest);log.info("访问IP:"+clientIP);log.info("请求路径:{}", httpServletRequest.getRequestURI());return true;}@Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {log.info("postHandle");}@Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {log.info("afterCompletion");}

2.注册拦截器

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {private final AuthInterceptor authInterceptor;public WebMvcConfig(AuthInterceptor authInterceptor) {this.authInterceptor = authInterceptor;}@Overrideprotected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(authInterceptor).addPathPatterns("/**");}
}

2、应用场景

1.登录验证,判断用户是否登录。
2.权限验证,判断用户是否有权限访问资源,如校验token
3.日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
4.处理cookie、本地化、国际化、主题等。
5.性能监控,监控请求处理时长等。
6.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)


总结

以上为个人学习过程中对java的一些学习总结,如有错误,欢迎各位批评指导,如有侵权,请联系本人删除,如果觉得有一点帮助麻烦点个赞加收藏!谢谢!


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

相关文章

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

过滤器(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 作为扫描该…

网络安全:Nessus安裝及使用教程

下载安装激活 1、進入官網 Nessus官網 下載 2、直接拖進kail 3、拷貝此文件至root用戶下(因為安裝Nessus時需要root權限) 4、使用命令dpkg -i Nessus-10.1.1-debian6_amd64.deb 5、啟動Nessus:/bin/systemctl start nessusd.service 6、安裝…

nessus安装教程

简介: Nessus号称世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库Nessus不同于传统的漏洞扫描软件,essus可同时在本机或远端上遥控,进行系统…

Nessus安装使用

Nessus简介 Nessus号称世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具 提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描 软件,essus可同时在本机或远端上遥控,进行系统的…

Nessus的使用教程

1.打开浏览器,输入https://localhost:8834/登录Nessus. 2.输入你设置的账号密码. 3.进入首页,可以使用浏览器自带的网页翻译(如谷歌)。 4.点击侧边栏policies(政策),显示策略界面。 5.点击new …