【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别

文章目录

  • 🌹概念
    • ⭐作用
  • 🎄快速入门
    • ⭐入门案例代码实现
  • 🛸拦截路径
  • 🍔拦截器interceptor和过滤器filter的区别
  • 🎆登录校验

在这里插入图片描述

🌹概念

拦截器(Interceptor)是一种软件设计模式,用于在应用程序处理请求或响应时对其进行拦截和修改。拦截器可以在整个应用程序中使用,用于执行跨越多个层的通用任务,如身份验证、授权、缓存、日志记录、性能计量等。

在Web开发中,拦截器通常用于在请求到达控制器之前或响应返回客户端之前对其进行修改。例如,在Spring框架中,可以使用拦截器来实现身份验证和授权检查,记录请求和响应的日志,以及处理全局异常等。

拦截器的工作方式是通过将其注册到应用程序的处理管道中,并在请求或响应传递过程中执行相应的操作。拦截器可以访问请求上下文、响应上下文和处理程序对象,从而允许它们访问和修改请求或响应的属性和状态。拦截器还可以决定是否将请求和响应继续传递到下一个处理程序或终止请求。

总之,拦截器是一种非常有用的设计模式,可以帮助开发人员在应用程序中实现通用的功能,提高代码的可重用性和可维护性。

⭐作用

请添加图片描述

拦截器是一种非常有用的设计模式,它可以在应用程序处理请求或响应时对其进行拦截和修改。以下是拦截器的几个常见用途:

  • 身份验证和授权:拦截器可以用于检查请求是否具有适当的凭据,并根据需要拒绝或允许请求。这使得开发人员能够轻松地实现身份验证和授权功能。
  • 缓存:拦截器可以用于缓存请求或响应数据,以便加快应用程序的性能。例如,在Web应用程序中,可以使用拦截器缓存静态资源,如CSS文件和图像。
  • 日志记录:拦截器可以用于记录请求和响应的详细信息,以便开发人员能够更好地了解应用程序的行为和性能。
  • 性能计量:拦截器可以用于测量应用程序的性能,并识别可能的瓶颈。例如,在Web应用程序中,可以使用拦截器跟踪页面加载时间,并标识慢速查询或资源。
  • 异常处理:拦截器可以用于处理应用程序中的异常情况,并提供友好的错误消息。例如,在Web应用程序中,可以使用拦截器捕获异常并显示自定义错误页面。

🎄快速入门

请添加图片描述

⭐入门案例代码实现

代码脚手架我传到网盘里面了,需要的同学请自取
我用夸克网盘分享了「tlias-web-management」,点击链接即可保存。
链接:https://pan.quark.cn/s/b98922faf182


首先我们创建interceptor类
在这里插入图片描述
写入下面的代码

package com.itheima.interceptor;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行 返回true,放行  返回false 拦截public boolean preHandle(HttpServletRequest  request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle");return true;}@Override //目标方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
}

在这里插入图片描述


创建配置类
在这里插入图片描述

写入下面的代码

package com.itheima.config;import com.itheima.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration  //表明这个是配置类
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//加入拦截器(加入的拦截器就是我们刚刚创建的拦截器)registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");}
}

在这里插入图片描述

入门案例就完成了

🛸拦截路径

通过配置拦截路径,我们可以设置拦截什么路径,放行什么路径

请添加图片描述

🍔拦截器interceptor和过滤器filter的区别

接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HanglerInterceptor接口
拦截范围不同:过滤器filter会拦截所有的资源,而Interceptor中会拦截Spring环境的资源
请添加图片描述

🎆登录校验

请添加图片描述

登录操作,我们需要使用LoginCheckFilter类,我们修改一下里面的代码

下面是修改后的代码

package com.itheima.interceptor;import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行 返回true,放行  返回false 拦截public boolean preHandle(HttpServletRequest  req, HttpServletResponse resp, Object handler) throws Exception {//获取请求的urlString url = req.getRequestURL().toString();log.info("请求的url:{}",url);//判断请求url中是否包含有login,如果包含,说明是登录操作,进行放行if(url.contains("login")){log.info("登录操作,放行");return true;}//获取请求头的令牌(token)String jwt=req.getHeader("token");//判断令牌是否存在,如果不存在,返回错误结果(未登录)//hasLength()方法判断字符串是否有长度(是否为空)if (!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回未登录的信息");Result error= Result.error("NOT_LOGIN");//使用阿里巴巴的fastJSON工具包,将对象转成json字符串String notLogin= JSONObject.toJSONString(error);//响应给浏览器resp.getWriter().write(notLogin);return false;}//解析token,如果解析失败,返回登录结果//jwt令牌try {JwtUtils.parseJWT(jwt);}catch (Exception e){e.printStackTrace();log.info("解析token失败,返回未登录的错误信息");Result error= Result.error("NOT_LOGIN");//使用阿里巴巴的fastJSON工具包,将对象转成json字符串String notLogin= JSONObject.toJSONString(error);//响应给浏览器resp.getWriter().write(notLogin);return false;}//放行log.info("令牌合法,放行");return true;}@Override //目标方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
}

在这里插入图片描述

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NSX-T】10. 搭建NSX-T环境 —— 使用 BGP 配置 Tier-0 网关

目录 10.1 创建上行链路网段10.2 创建 Tier-0 网关(1)设置 Interface 信息(2)设置 BGP添加 BGP 邻居 (3)设置 BGP 路由重分发设置路由重新分发 10.3 连接 Tier-0 和 Tier-1 网关10.4 使用网络拓扑验证 Tier…

《人工智能导论》知识思维导图梳理【第7章节】

文章目录 说明一 专家系统二 机器学习2.1 机器学习定义2.2 机器学习过程2.2.1 工作流程2.2.2 模型评估 2.3 机器学习分类在这里插入图片描述 机器学习部分md内容机器学习1 机器学习定义机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测机器学习&am…

jpa 修改信息拦截

实现目标springbootJPA 哪个人,修改了哪个表的哪个字段,从什么值修改成什么值 import jakarta.persistence.*; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; im…

嵌入式开发、C++后端开发、C++音视频开发怎么选择?

嵌入式开发、C后端开发和C音视频开发的选择问题 近年来,随着互联网和物联网的快速发展,嵌入式开发、C后端开发和C音视频开发等职业领域也逐渐受到广泛关注。 对于有志于从事这些领域的人来说,如何做出选择呢?下面将从前景、薪酬和…

数据结构 之map/set练习

文章目录 1. 只出现一次的数字算法原理:代码: 2. 随机链表的复制算法原理:代码: 3. 宝石与石头算法原理:代码: 4. 坏键盘打字算法原理:代码: 5. 前K个高频单词算法原理:代…

kakfa实战指引-实时海量流式数据处理

前言 我们最终决定从头开始构建一些东西。我们的想法是,与其专注于保存成堆的数据,如关系数据库、键值存储、搜索索引或缓存,不如专注于将数据视为不断发展和不断增长的流,并围绕这个想法构建一个数据系统——实际上是一个数据架…

日本科学家们使用AI技术首次创造了世界上的心灵影像

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

圆通速递查询,圆通速递单号查询,一键复制查询好的物流信息

批量查询圆通速递单号的物流信息,并将查询好的物流信息一键复制出来。 所需工具: 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&…

网站监控/定时任务/网站网址URL状态监控神器

源码介绍: 这是一款在线监控网址的源码,对于有多个网站的站长来说还是非常有用的。也可以做为一项收费服务对外提供。这个程序没啥问题,就是UI有点简单,不影响使用。 网站监控/定时任务/网站网址URL状态监控神器,可以…

【python】Debian安装miniconda、spyder、tushare

1. miniconda 安装 — 动手学深度学习 2.0.0 documentation中有安装Miniconda的一些说明。 Miniconda — miniconda documentation是Miniconda网站,里面也有安装说明。 Debian安装按照linux安装即可: mkdir -p ~/miniconda3 wget https://repo.anaco…

打开软木塞,我们来谈谈葡萄酒泡泡吧

香槟是任何庆祝场合的最佳搭配。从婚礼和生日到单身派对和典型的周五晚上,这款气泡饮料是生活中特别聚会的受欢迎伴侣。 来自云仓酒庄品牌雷盛红酒分享你知道吗,你喜欢喝的那瓶香槟酒可能根本不是香槟,而是汽酒?你不是唯一一个认…

Python获取去哪儿旅游数据并作可视化攻略

嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: 版 本: python 3.8 编辑器:pycharm 第三方库: requests >>> pip install requests parsel >>> pip install parsel 模块安装: 按住键盘 win…