当前位置:首页 > 科技  > 软件

彻底明白Filter与Interceptor

来源: 责编: 时间:2024-05-16 17:42:34 237观看
导读Filter(过滤器)概述Servlet规范中定义的一种组件,用于在请求进入Servlet之前或响应返回客户端之前执行一些操作。它依赖于Servlet容器,几乎可以对任何请求进行过滤,随着Web应用的启动而启动,Web应用停止则Filter销毁。工作

Filter(过滤器)

概述

Servlet规范中定义的一种组件,用于在请求进入Servlet之前或响应返回客户端之前执行一些操作。它依赖于Servlet容器,几乎可以对任何请求进行过滤,随着Web应用的启动而启动,Web应用停止则Filter销毁。t6628资讯网——每日最新资讯28at.com

工作原理

通过实现javax.servlet.Filter,对请求进行过滤拦截,进而做统一处理。最后将请求交给Servlet进行处理并生成得到响应。得到响应以后,Filter可以对响应再次进行处理。t6628资讯网——每日最新资讯28at.com

图片图片t6628资讯网——每日最新资讯28at.com

应用场景

如进行过滤低俗文字,危险字符,日志记录、权限验证、字符编码处理等等。如防XSS攻击的XSSFilter过滤器。t6628资讯网——每日最新资讯28at.com

代码实现(SpringBoot举例)

创建Filter类

public class MyFilter implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {        // 初始化操作    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        // 在请求处理之前执行的操作        // 可以对请求进行修改、验证等操作        chain.doFilter(request, response);        // 在响应返回客户端之前执行的操作        // 可以对响应进行修改、记录日志等操作    }    @Override    public void destroy() {        // 销毁操作    }}

注册Filter

在Spring Boot中,我们可以通过配置类或使用@WebFilter注解来注册Filter。t6628资讯网——每日最新资讯28at.com

@Configurationpublic class FilterConfig {    @Bean    public FilterRegistrationBean<MyFilter> myFilter() {        FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();        registrationBean.setFilter(new MyFilter());        registrationBean.addUrlPatterns("/api/*"); // 设置过滤的路径        return registrationBean;    }}

Interceptor 拦截器介绍

概述

Interceptor是Spring框架提供的一种拦截器,与Servlet无关,它依赖于Web框架,用于在Controller方法执行前后进行处理。与Filter不同,Interceptor是Spring MVC框架特有的组件。它可以将一些共有的行为动作给通用化、标准化,进而让代码更加简洁,可扩展性更高。t6628资讯网——每日最新资讯28at.com

原理

图片图片t6628资讯网——每日最新资讯28at.com

基于实现HandlerInterceptor接口,并重写它的方法。它有如下方法:t6628资讯网——每日最新资讯28at.com

  • preHandle方法:目标资源方法执行前执行。返回true则继续往下执行 返回false则进行拦截。
  • postHandle方法:目标资源方法执行后执行
  • afterCompletion方法:视图渲染完毕后执行,最后执行。

应用场景

Interceptor主要用于处理与Controller相关的逻辑,比如权限验证、日志记录、统一异常处理等。t6628资讯网——每日最新资讯28at.com

代码实现

创建Interceptor类

public class MyInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        // 在Controller方法执行前执行的操作        // 返回true表示继续执行,返回false表示中断执行        return true;    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,                           ModelAndView modelAndView) throws Exception {        // 在Controller方法执行后、视图渲染前执行的操作    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,                                Exception ex) throws Exception {        // 在整个请求完成后执行的操作    }}

注册Interceptor

import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new MyInterceptor())                .addPathPatterns("/api/**") // 设置拦截的路径                .excludePathPatterns("/api/public/**"); // 设置排除的路径    }}

Filter与Interceptor的区别及如何选择

执行时机不同

  • Filter:在请求进入Servlet之前和响应返回客户端之前执行。
  • Interceptor:在Controller方法执行前、执行后、视图渲染前以及整个请求完成后执行。

范围

  • Filter:作用于整个Web应用,不仅限于Spring MVC。
  • Interceptor:仅作用于Spring MVC中的Controller层。

使用场景

  • Filter:适用于通用的请求处理逻辑,比如字符编码、日志记录等。
  • Interceptor:适用于与Controller相关的业务逻辑,比如权限验证、统一异常处理等。

本文链接:http://www.28at.com/showinfo-26-88715-0.html彻底明白Filter与Interceptor

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#委托:实现灵活的方法调用

下一篇: 还是结构体指针写的代码看着舒服

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top