Spring拦截器与Servlet过滤器区别

news2024/11/26 0:29:14

前言

温馨提醒:希望读者了解Spring拦截器和Servlet过滤器基础知识

目录

前言

位置和层面

使用场景

 配置方式

生命周期

执行顺序

总结


Spring拦截器基础知识icon-default.png?t=N7T8https://blog.csdn.net/Dreamkidya/article/details/141825688?spm=1001.2014.3001.5501

Servlet过滤器基础知识icon-default.png?t=N7T8https://blog.csdn.net/Dreamkidya/article/details/141292492?spm=1001.2014.3001.5501

位置和层面

  • Servlet过滤器(Filter)
    • Filter是servlet规范的一部分,属于javaEE标准,它位于servlet容器层面上,可以对几乎所有的请求进行拦截
    • 它是在DispatcherServlet之前执行的,因此它的作用范围更广
  • Spring拦截器(Interceptor)
    • Interceptor是Spring框架的一部分,属于SPring的层面.他主要针对SPring的控制器进行拦截,通常用于对HanderMapping确定的请求进行拦截
    • Interceptor只处理经过DispatcherServlet的请求,因此它的范围小

使用场景

  • Servlet过滤器(Filter)

    • Filter通常用于通用的,与Web应用程序整体相关的功能.例如:编码设置,登录验证,权限检查,跨域问题处理,日志记录.
    • Filter可以拦截所有的请求类型,适合做一些全局性处理.
  • Spring拦截器

    • Interceptor更适合于与业务逻辑紧密相关的功能,如请求进入Controller之前进行预处理(如权限验证),在请求完成之后处理(如日志记录)等
    • 它专注于处理与控制器相关的请求,因此在业务逻辑处理中更加方便灵活

 配置方式

Servlet过滤器(Filter)

Filter通过在web.xml文件中配置,或者使用@WebFilter注解来实现和配置。配置完成后,Filter会自动生效

现实过滤器:权限验证(token验证)

首先实现Filter接口--->重写doFilter()方法(此处没重写init()和destory())---->编写代码---->向后或者前返回

@WebFilter(urlPatterns = "/api/*")
public class TokenFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("token验证过滤器");
        String token = request.getHeader("token");
        boolean verify = JWTUtil.verify(token);
        if (verify){
            filterChain.doFilter(servletRequest, servletResponse);
        }else {
            Result result = new Result(401,"token认证失败",null);
            servletResponse.getWriter().print(new ObjectMapper().writeValueAsString(result));
        }
    }
}

Spring拦截器(Interceptor)

Interceptor通过实现HandlerInterceptor接口,并在Spring的配置文件中(如spring.xml)进行配置,或者通过@Configuration类中的WebMvcConfigurer进行注册

现实拦截器:权限验证(Token验证)

首先实现HandlerInterceptor接口---->重写preHandle()方法----->编写代码---->返回true/false

public class AdminTokenInterceptor implements HandlerInterceptor {

    /*
    拦截器处理的方法
    当请求到达处理器前,进入到拦截器进行处理
    返回true --- 离开拦截器,向后执行到达处理器
    返回false --- 不在向后执行
    */

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String adminToken  = request.getHeader("adminToken");
       //这里假设Token为1234567  这里没有调用Jwt生成Token
        if (adminToken.equals("1234567")){
            return true;
        }else {
            //向前端响应
            Result result = new Result(401,"token验证失败",null);
            response.getWriter().write(new ObjectMapper().writeValueAsString(result));

        }
        return false;
    }
}

注册拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer{

//	注册配置拦截器
	public void addInterceptors(InterceptorRegistry registry) {
		InterceptorRegistration inter =  registry.addInterceptor(new AdminTokenInterceptor());
		inter.addPathPatterns("/**"); //配置进入拦截器的地址
		inter.excludePathPatterns("/loginCtl/login");//放行地址
		//inter.addPathPatterns("/user/**"); //用户需要拦截过滤地址
	}
}

生命周期

  • Servlet过滤器(Filter)

    • Filter的生命周期由Servlet容器管理。Filter在容器启动时初始化,在容器关闭时销毁
  • Spring拦截器(Interceptor)

    • Interceptor的生命周期由Spring管理。Interceptor的初始化和销毁是与Spring的应用上下文(ApplicationContext)同步的。

执行顺序

  • Servlet过滤器(Filter)

    • Filter链(Filter Chain)中的过滤器是按照配置顺序执行的。Filter可以在请求到达Servlet之前处理,也可以在Servlet处理之后响应返回之前处理
  • Spring拦截器(Interceptor)

    • Interceptor执行顺序由Spring的配置决定,支持多个拦截器按顺序执行。它提供了三个方法:preHandlepostHandleafterCompletion,分别用于处理请求的不同阶段。(本文只重写postHandle)

总结

  • 过滤器适用于全局性的、跨所有资源的处理任务。
  • 拦截器则更适用于特定于业务逻辑的控制器层面的请求处理
  • 在Spring项目中拦截器使用场景较多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉软件教学平台

1、基本介绍 计算机视觉软件教学平台是中智讯公司开发的一款面向人工智能相关专业机器视觉方向的综合型实验平台,主要满足:图像处理、图像识别、机器视觉应用、边缘计算应用、智能算法等课程的实验和实训,是基于新工科和工程教育思维和专业改…

IPv6的部署会影响现有IPv4网络的运行吗

IPv6是新一代的互联网协议,到现在为止,担心它是否会影响现有IPv4网络的运行的人不在少数。 先来了解下IPv4和IPv6的区别。IPv4使用的是32位地址,IPv6使用的是128位地址,很多人现在不理解了,这和地址数有关系吗&#xf…

【从零开始学爬虫】采集58同城房源数据

本文以采集北京市58同城房源数据为例进行演示: l 采集网站 【场景描述】采集58同城房源数据。 【使用工具】前嗅ForeSpider数据采集系统 http://www.forenose.com/view/commodity/forespider.html 【入口网址】 https://bj.58.com/xiaoqu/?PGTID0d000000-000…

【小呆的热力学笔记】理想热力循环

文章目录 5.理想热力循环5.1 卡诺定理5.2 卡诺循环5.3 逆向卡诺循环 5.理想热力循环 5.1 卡诺定理 考虑这样的一个实际的热力循环,其过程为存在一个高温热源,工作介质从该高温热源中吸取热量Q1,其中一部分通过工作介质对外做功转化为机械功…

idea安装并使用maven依赖分析插件:Maven Helper

在 IntelliJ IDEA 中安装并使用 Maven Helper 插件可以帮助你更方便地管理 Maven 项目的依赖,比如查看依赖树、排除冲突依赖等。以下是安装和使用 Maven Helper 插件的步骤: 安装 Maven Helper 插件 打开 IntelliJ IDEA 并进入你的项目。 在 IDE 的右下…

【408 数据结构】第1章绪论

文章目录 绪论考纲DS 基本概念1. 基本概念2. 数据结构三要素 算法(时/空间复杂度计算)1. 算法概念2. 算法效率的度量时间复杂度:空间复杂度: 小结 绪论 考纲 计算时间复杂度和空间复杂度(重点难点) DS …

简化物业数据管理:使用 Indexify 进行高级数据提取和检索

使用 Indexify 进行文档查询的分步指南。欢迎来到雲闪世界。 添加图片注释,不超过 140 字(可选) 总结: 传统的数据提取方法通常会错过非结构化内容的更深层次的见解,尤其是在房地产领域。 本文探讨使用 Indexify&…

Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测

概述 源码地址:https://github.com/neuhai/Mental-LLM.git 论文地址:https://arxiv.org/abs/2307.14385 在一项关于哪些法律硕士适合精神健康护理的研究中,对以下五种法律硕士进行了比较 羊驼-7b。羊驼-LoRA。FLAN-T5-XXLGPT-3.5GPT-4. 作…

TLS连接的握手过程

TLS(传输层安全协议)握手过程是客户端(如浏览器)和服务器(如网站)之间建立安全连接的一系列步骤。以下是TLS握手的详细过程: 图片来自Vector 1. 客户端问候(Client Hello&#xff0…

PHP一键发起灵活定制多功能投票小程序系统源码

​一键发起,灵活定制 —— 多功能投票小程序 🚀【开篇:告别繁琐,投票新体验】🚀 还在为组织投票活动而头疼不已吗?繁琐的流程、有限的选项、难以统计的结果...这些都将成为过去式!今天&#x…

将python项目打包成一个可执行文件(包含需要的资源文件)

目标 项目源码是采用Python编写,代码中需要读取部分资源文件。现在需要将项目打包成一个exe文件,没有其他任何多余文件,仅1个exe文件。 打包 安装pyinstaller 在自己项目的虚拟环境中,安装pyinstaller。注意一定要是虚拟环境&…

亚马逊运营秘籍:这些冷门知识,你不可不知!

今天,小编将揭秘几个鲜为人知的亚马逊运营冷知识,让我们一同探索并学习吧! 退货佣金扣除:当买家提出退货时,无论是部分退款还是全额退款,亚马逊会直接从卖家账户中扣除20%的佣金,剩余的80%则返还…

Java导出图片到excel

1、例如你有这样一个集合,具体结合你的业务场景 Data public class Student {/*** 姓名*/private String xh;/*** 学号*/private String xm;/*** 照片*/private byte[] zp; }2、相关代码 RequestMapping(value "/quereImgByPkid/{pkid}",method Requ…

【数据分享】地级市-国际互联网用户数(2001-2019年)

数据介绍 在当今数字化时代,互联网已经成为人们生活中不可或缺的一部分。今天,我们为大家带来一份极具价值的数据资源 —— 地级市 - 国际互联网用户数(2001 - 2019 年)。 这份涵盖了近二十年的数据,清晰地展现了各地…

Google上架:PAD的三种分发模式之install-time分发(减小包体上架,适用于包体大于150MB,小于1.15GB的包体)

近期技术服务在升级,抽空写一下关于上架部分的难点,今天来讲一下关于包体过大解决办法中的PAD分发(install-time分发)模式,希望能给好兄弟们带来帮助。 注意!!!这个方法适用于包体大于150MB,小于1.7GB这个区间的包体,不在这个区间的小伙伴可以跳过这个文章,直接私聊…

华为 HCIP-Datacom H12-821 题库 (6)

有需要题库的可以看主页置顶 V群仅进行学习交流 1.转发表中 FLAG 字段中B 的含义是? A、可用路由 B、静态路由 C、黑洞路由 D、网关路由 答案:C 解析: 可用路由用U 表示,静态路由用 S 表示,黑洞路由用 B 表示&#x…

交叉编译 mpfr

文章目录 交叉编译 mpfr1 概述2 源码下载3 交叉编译 交叉编译 mpfr 1 概述 MPFR(Multiple Precision Floating-Point Reliable)是一个用于高精度浮点数计算的开源库,它提供了高精度的浮点数运算和函数库,适用于需要处理大数或高精…

有哪些开学必备好物推荐?2024年盘点推荐五款高性价比数码好物!

新的学期,新的开始。在 2024 年开学季,为了让同学们更好地投入学习和生活,拥有更便捷、高效的体验,我精心测评盘点并推荐五款高性价比数码好物。这些数码好物不仅能满足学习需求,还能为课余生活增添乐趣,是…

35~750kV 变电站无人值守与集中监控的智能运维模式

1、引言 电力行业的快速发展和电网规模的持续扩张,使得传统的变电站运维模式日渐不能满足现代电网对于安全性、可靠性和效率的更高要求。因此,向无人值守与集中监控过渡,已经逐渐成为了整个行业发展的主旋律。 2、关键技术支撑 2.1 自动化监…

CAE小白入门:HyperMesh的使用和帮助

1.1.3 启动 HyperMesh (1) On PC • 从起始菜单&#xff0c;选择 All Programs >Altair HyperWorks (version) > HyperMesh Desktop。 • 右击上述程序创建软件启动快捷方式&#xff0c;点击快捷方式。 (2) On UNIX • 在命令窗口点击 <install directory>/sc…