首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >过滤器和拦截器

过滤器和拦截器

作者头像
用户4235284
发布于 2022-12-03 05:08:34
发布于 2022-12-03 05:08:34
6800
举报
文章被收录于专栏:后端学习之道后端学习之道

什么是Servlet?

它是一个 Java 类,用于扩展托管通过请求-响应编程模型访问的应用程序的服务器的功能。

Java Servlet 技术定义了特定于 HTTP 的 servlet 类。 javax.servlet 和 javax.servlet.http 包提供了用

于编写 servlet 的接口和类。 “javax.servlet”包中的 Servlet 声明了 servlet 生命周期的三个基本方法——init()、service() 和 destroy()。

什么是Servlet容器?

Servlet 在处理网络端(例如解析 HTTP 请求、连接处理等)的 servlet 容器中运行。 Tomcat 是最受欢迎的。

Filter

它是一个 Java 类,由 servlet 容器针对每个传入的 HTTP 请求和每个 HTTP 响应执行。

在到达 Servlet 之前,请求总是首先通过 Filter 实例。

如果您的应用程序中有多个自定义过滤器,则可以使用“@Order”注释定义顺序。

  • init(FilterConfig config) — 仅调用一次。它用于初始化过滤器。
  • doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain) — 每次用户向过滤器映射到的任何资源发送请求时都会调用此方法。它用于执行过滤任务。
  • destroy() - 当过滤器从服务中取出时,它只被调用一次。

Interceptor

Spring 拦截器类似于 Servlet 过滤器。拦截器只允许自定义预处理,可以选择禁止处理程序本身的执行,以及自定义后处理,可以访问 Spring 上下文。 preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) — 这用于在将请求发送到控制器之前执行操作。此方法应返回 true 以将响应返回给客户端。

  • postHandle(HttpServletRequest 请求,HttpServletResponse 响应,对象处理程序,ModelAndView modelAndView) — 这用于在向客户端发送响应之前执行操作。
  • afterCompletion(HttpServletRequest 请求,HttpServletResponse 响应,
  • Object handler, Exception exception) — 这用于在完成请求和响应后执行操作。HandlerInterceptor : HandlerInterceptor 实例作为 DispatcherServlet(实现 javax.servlet.Servlet)内部请求处理的一部分执行。HandlerInterceptorAdapter: 如果你想提供一个自定义实现并且只关心他们的几个方法(如果你不想创建需要覆盖的空方法),最好实现一个适配器。
Filters vs HandlerInterceptors
  • Filter 与 Servlet API 有关,而 HandlerIntercepter 是 Spring 特定的概念。
  • 拦截器只会在过滤器之后执行。
  • 细粒度的预处理任务适用于HandlerInterceptor(授权检查等)
  • 内容处理相关或通用流程非常适合过滤器(例如多部分表单、zip 压缩、图像处理、日志记录请求、身份验证等)
  • Interceptor 的 postHandle 方法将允许您向视图添加更多模型对象,但您不能更改 HttpServletResponse,因为它已经提交。
  • Filter 的 doFilter 方法比 Interceptor 的 postHandle 更加通用。 您可以更改请求或响应并将其传递给链,甚至阻止请求处理。
  • HandlerInterceptor 提供了比过滤器更细粒度的控制,因为您可以访问实际的目标“处理程序”。 您甚至可以检查处理程序方法是否具有特定注释。

Spring Cloud Gateway 自定义过滤器

GlobalFilter

全局过滤器影响每个请求。

GatewayFilter

网关过滤器仅适用于某些路由

Order: 如果我们想配置过滤器在过滤器链中的位置,我们可以检索一个 OrderedGatewayFilter 实例。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 过滤器和拦截器
概念: 滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求; 在请求到达Servlet/JSP之前,过滤器截获请求;
赵哥窟
2022/06/26
9130
Java 过滤器和拦截器
过滤器与拦截器详解图_过滤器 拦截器
拦截器详解 依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,拦截器可以调用IOC容器中的各种依赖,而过滤器不能,因此可以使用Spring的依赖注入进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。 spring mvc中的Interceptor可以理解为是Spring MVC框架对AOP的一种实现方式。一般简单的功能又是通用的,每个请求都要去处理的,比如判断token是否失效可以使用spring mvc的HanlderInterceptor, 复杂的,比如缓存,需要高度自定义的就用spring aop。一般来说service层更多用spring aop,controller层有必要用到request和response的时候,可以用拦截器。 spring mvc中的Interceptor拦截请求是通过HandlerInterceptor来实现的。所以HandlerInteceptor拦截器只有在Spring Web MVC环境下才能使用。在SpringMVC中定义一个拦截器主要有两种方式,第一种方式是要实现Spring的HandlerInterceptor接口,或者是其它实现了HandlerInterceptor接口的类,比如HandlerInterceptorAdapter。第二种方式是实现WebRequestInterceptor接口,或者其它实现了WebRequestInterceptor的类。 HandlerInterceptor接口定义方法preHandle, postHandle, 和afterCompletion: preHandle(进入 Handler方法之前执行):预处理回调方法,实现处理器的预处理(如登录检查),返回值:true表示继续流程(如调用下一个拦截器或处理器),false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应。 postHandle(进入handler方法之后,返回modelAndView之前):后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。 afterCompletion(执行Handler完成执行此方法):整个请求处理完毕回调方法,即在视图渲染完毕时回调。该方法也是需要当前对应的Interceptor 的preHandle方法的返回值为true时才会执行。这个方法的主要作用是用于进行资源清理工作的,如性能监控中我们可以在此记录结束时间并输出消耗时间。 以HandlerInterceptor1、HandlerInterceptor2为例,解析拦截器执行顺序 第一种情况:正常的拦截器执行流程
全栈程序员站长
2022/10/02
5710
过滤器与拦截器详解图_过滤器 拦截器
【二十二】springboot整合拦截器实战并对比过滤器
本章和上章相比,通过使用拦截器的方式去模拟处理token的校验,再之后通过两者的对比,比较一下两者的不同。下面开始拦截器的基础用法学习。
小z666
2024/06/21
4440
【二十二】springboot整合拦截器实战并对比过滤器
spring boot拦截器和过滤器_过滤器的实现
1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
全栈程序员站长
2022/09/23
2K0
spring boot拦截器和过滤器_过滤器的实现
springmvc过滤器和拦截器的区别_拦截器和过滤器的区别面试
创建一个过滤器类继承java.servlet.filter接口,实现filter中的拦截方法。
全栈程序员站长
2022/09/23
4450
springmvc过滤器和拦截器的区别_拦截器和过滤器的区别面试
Spring Boot2(七):过滤器拦截器的使用
过滤器和拦截器两者都具有AOP的切面思想,关于aop切面,可以看上一篇文章。过滤器filter和拦截器interceptor都属于面向切面编程的具体实现。
鸟不拉屎
2019/07/06
3.4K0
spring boot拦截器和过滤器_java拦截器的作用
b.过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境
全栈程序员站长
2022/09/23
9660
保卫你的应用:探索过滤器和拦截器的奥秘
在现代Web开发中,安全性和性能是至关重要的因素。过滤器和拦截器是Web应用中的两个关键概念,它们可以帮助你保护你的应用免受恶意攻击,同时还可以实现各种功能,从日志记录到性能优化。这两个概念可能听起来有些抽象,但实际上它们就像是你应用的护卫者,站在前线,确保一切都在掌握之中。在本文中,我们将深入探讨过滤器和拦截器的作用、差异以及如何在你的项目中充分利用它们。
一只牛博
2025/05/30
900
保卫你的应用:探索过滤器和拦截器的奥秘
面试又问:拦截器和过滤器的区别!
大家好,我是田哥,上周有个朋友在面试中被问题倒拦截器和过滤器,第一印象可能会感觉到这两个玩意不就是都可以做日志打印、权限功能...
田维常
2023/08/31
3690
面试又问:拦截器和过滤器的区别!
SpringBoot实现过滤器、拦截器与切片
Filter是J2E中来的,可以看做是Servlet的一种“加强版”,它主要用于对用户请求进行预处理和后处理,拥有一个典型的处理链。Filter也可以对用户请求生成响应,这一点与Servlet相同,但实际上很少会使用Filter向用户请求生成响应。
用户5224393
2020/02/26
1.1K0
SSM项目中使用拦截器和过滤器
Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能,自定义的拦截器必须实现 HandlerInterceptor 接口
别团等shy哥发育
2023/02/25
7930
SSM项目中使用拦截器和过滤器
浅谈 | 过滤器、监听器、拦截器和AOP
最近在进行系统的日志模块重构工作,在选择技术实现的时候在过滤器和拦截器之间飘忽不定,于是决定抽点时间将过滤器和拦截器进行深度分析,顺便把监听器和AOP等内容也复习一下。
啃饼思录
2023/03/18
2K0
浅谈 | 过滤器、监听器、拦截器和AOP
面试官:谈谈过滤器和拦截器的区别?
而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件
路人甲Java
2023/08/29
5250
面试官:谈谈过滤器和拦截器的区别?
过滤器与拦截器的N个区别,别傻傻分不清了
Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有不少区别,很多朋友工作多年,可能还没有深刻的了解它们的具体使用以及它们之间的区别。本文带大家全面了解一下它们的使用、实现机制以及区别。
程序新视界
2020/12/28
1.1K0
过滤器与拦截器的N个区别,别傻傻分不清了
拦截器(Interceptor)与过滤器(Filter)
  拦截器是面向切面(AOP)编程中应用的一种统一处理方案,就是在你的Controller、Servie或者一个Method调用一个Method,或者在Method调用一个Method之后,统一的进行处理的方案,基于Java的反射机制。
BUG弄潮儿
2021/06/25
5.4K0
拦截器(Interceptor)与过滤器(Filter)
Spring学习笔记(8)--拦截器Interceptor和过滤器Filter的区别详解
过滤器和拦截器 底层实现方式大不相同:过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。
黄规速
2022/04/14
5.1K0
Spring学习笔记(8)--拦截器Interceptor和过滤器Filter的区别详解
过滤器 和 拦截器 6个区别,别再傻傻分不清了
周末有个小伙伴加我微信,向我请教了一个问题:老哥,过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊? 听到题目我的第一感觉就是:简单!
程序员小富
2020/06/04
1.4K0
过滤器 和 拦截器 6个区别,别再傻傻分不清了
面试突击90:过滤器和拦截器有什么区别?
过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差距,接下来我们一起来看。
磊哥
2022/10/28
4.3K0
万字长文带你彻底学会拦截器与过滤器
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
一只胡说八道的猴子
2021/02/04
9460
万字长文带你彻底学会拦截器与过滤器
SpringBoot 拦截器
web拦截器作用有权限控制,日志记录等等。SpringBoot 提供 HandlerInterceptor 方便我们开发;
IT技术小咖
2019/11/23
8370
推荐阅读
相关推荐
Java 过滤器和拦截器
更多 >
交个朋友
加入[数据] 腾讯云技术交流站
获取数据实战干货 共享技术经验心得
加入数据技术工作实战群
获取实战干货 交流技术经验
加入[数据库] 腾讯云官方技术交流站
数据库问题秒解答 分享实践经验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档