Filter(过滤器)Intercerptor(拦截器)

news2024/11/18 22:42:46

Filter过滤器

顾名思义,Filter可以对请求进行过滤,当浏览器发送请求时,首先先会被Filter进行拦截,Filter可以决定此次拦截是否放行,如果选择放行,放行之后还会返回Filter执行剩下的代码。
在这里插入图片描述

使用方法:

  1. 创建过滤器类实现Filter接口,注意是jakarta.servlet下的Filter
  2. 在过滤器类上加入@WebFilter(urlPatterns = “/*”),标示类为拦截器类,拦截所有请求。
  3. 在主程序类上加入@ServletComponentScan,程序会扫描Servlet相关的组件(Filter属于javaweb的三大件,不属于Springboot)

拦截路径:

/* 拦截所有
/depts/* 拦截depts/开头的所有

过滤器链

当存在多个过滤器时,会形成过滤器链,执行顺序由过滤器的类名决定。放行后会进入下一个过滤器。

样例代码:登录拦截器

@WebFilter(urlPatterns = "/*")

public class webFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;

        //假设JWT令牌在请求头中以token存储
        String token = httpServletRequest.getHeader("token");
        if(StringUtils.isEmpty(token)){
            // token为null或长度为0
            servletResponse.getWriter().write("鉴权失败,没有携带token");//这里响应应该返回对象JSON
            return;
        }
        //JWT鉴权
        try {
            Demo.ParseJWT(token);//鉴权
        }catch (Exception e){
            System.out.println("鉴权失败");
            servletResponse.getWriter().write("鉴权失败");//这里响应应该返回对象JSON
            return;
        }
        //鉴权成功,放行
        filterChain.doFilter(servletRequest, servletResponse);

        System.out.println("放行返回");
    }
}

Interceptor拦截器

Interceptor是Spring框架的类

使用方法:

  1. 创建拦截器类,实现HandleInterceptor接口。加上注解@Component
  2. 创建配置类,实现WebMvcConfigurer接口,加上注解@Configuration,标识为配置类。

拦截路径:

/* 拦截一级目路径/a /b 不能拦截/a/c
/** 拦截任意级路径
/dept/* /dept下的一级路径,不能匹配/dept /dept/a/b
/dept/** /dept下的任意路径

执行流程

浏览器发送请求先被Tomcat中的Filter捕获,放行后再交给Spring环境的DispatcherServlet(前端控制器),由DispatcherServlet转发给Interceptor,最后才到达了Controller。
所以Filter是比Interceptor先执行的,并且Filter能够拦截所有请求,而Interceptor只能拦截Spring环境下的请求。
在这里插入图片描述

拦截器代码实现

interceptor:

@Component
public class LoginInterceptor implements HandlerInterceptor {
    //资源方法运行前运行,返回true则放行,返回false则不放行
    @Override
    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("post");
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
    //视图渲染后运行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

配置类:

@Configuration
public class Webconfig implements WebMvcConfigurer {
    @Autowired
    LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
    }
}

全局捕获异常

能够捕获全部未捕获的异常,返回相应的JSON格式错误。

@RestControllerAdvice
public class GlobalException {
    @ExceptionHandler(Exception.class)
    public User ex(Exception e){
        return new User();//一旦出现未捕获的异常,返回User类对应的JSON串
    }
}

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

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

相关文章

YOLOv7独家改进:Multi-Dconv Head Transposed Attention注意力,效果优于MHSA| CVPR2022

💡💡💡本文独家改进:Multi-Dconv Head Transposed Attention注意力,可以高效的进行高分辨率图像处理,从而提升检测精度 MDTA | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 �…

初识Java 13-2 异常

目录 标准Java异常 新特性:更好的NullPointerException报告机制 使用finally执行清理 finally有什么用 在return时使用finally 缺陷:异常丢失 异常的约束 构造器 本笔记参考自: 《On Java 中文版》 标准Java异常 Throwable类描述了任…

项目生命周期

阶段 项目经理或组织可以将每一个项目划分为若干个阶段,以便于有效地进行管理控制,并实施该项目组织的日常运作联系起来。 项目划分为四个阶段:概念、计划、实施、结束 生命期 项目阶段合在一起称为项目生命期,项目生命期确定了将…

Go流程控制与快乐路径原则

Go流程控制与快乐路径原则 文章目录 Go流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的优先级…

【k8s】ingress-nginx通过header路由到不同后端

K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目,需要在相同域名、uri,根据header将请求转发到不同的后端中在稳定发布的情况下,ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…

ubuntu配置yolov5环境

本文硬件平台为工控机,系统环境为ubuntu18 配置yolov5步骤 1.下载pytorch和torchvision软件包 由于在线安装容易出现安装失败,所以本文使用的是本地安装。本文是基于miniconda安装的,miniconda安装参考之前的博客:ubuntu中安装m…

ssm+vue的台球厅管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的台球厅管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…

差模电感和共模电感的差别

一、初步了解差模、共模的概念 超链接,点击鼠标打开:X电容和Y电容;差模与共模初认识 二、差模和共模电感的二者区别 共模电感和差模电感,是电路中常用的滤波电感、EMI器件,两者经常以环形电感线圈的方式存在。 首先…

理解http中cookie!C/C++实现网络的HTTP cookie

HTTP嗅探(HTTP Sniffing)是一种网络监控技术,通过截获并分析网络上传输的HTTP数据包来获取敏感信息或进行攻击。其中,嗅探器(Sniffer)是一种用于嗅探HTTP流量的工具。 在HTTP嗅探中,cookie是一…

Python一步到位实现图像转PDF自动化处理详解

什么是 img2pdf 库? img2pdf 是一个 Python 库,它可以让你轻松地把多张图像转换为 PDF 文件。它支持多种图像格式,如 JPG, PNG, GIF, BMP 等,并且可以自动调整图像的大小和方向,以适应 PDF 的页面大小和方向。它还可以…

跨域问题-笔记

这里写目录标题 一、什么是跨域:二、跨域问题解决思路:1.从浏览器入手2.从域名入手3.从jsonp入手4.从代理入手 一、什么是跨域: 跨域指的是不同服务器之间不能相互访问各自的资源或者数据,这出于一个策略——“同源策略”&#x…

【力扣】2578. 最小和分割

【力扣】2578. 最小和分割 文章目录 【力扣】2578. 最小和分割1. 题目介绍2. 思路3. 解题代码4. 疑问?5. Danger参考 1. 题目介绍 给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足: num1 和 num2 直接连起来…

Python 入门

目录 1 Python介绍1.1 特点1.2 什么时候不应该用Python1.3 Python解释器 2 IDLE开发环境使用入门2.1 IDLE 两种模式2.2 IDLE常用快捷键 3 程序基本格式4 图形化程序设计5 绘制奥运五环 声明:本文作为自己的学习笔记,欢迎大家于本人学习交流,转…

联邦学习综述二

联邦学习漫画 联邦学习漫画链接: https://federated.withgoogle.com/ Federated Analytics: Collaborative Data Science without Data Collection 博客链接: https://blog.research.google/2020/05/federated-analytics-collaborative-data.html 本篇博客介绍了联邦分析&a…

JTS:10 Crosses

这里写目录标题 版本点与线点与面线与面线与线 版本 org.locationtech.jts:jts-core:1.19.0 链接: github public class GeometryCrosses {private final GeometryFactory geometryFactory new GeometryFactory();private static final Logger LOGGER LoggerFactory.getLog…

掌握 Web3 的关键工具:9大宝藏APP助你玩转区块链

Web3世界充满了无限机遇,但要掌握它,您需要合适的工具���。今天,我将为您介绍9款Web3必备APP,涵盖钱包、DEX、和工具三大类别。而且,我要特别强烈推荐一个强大的钱包——Bitget Wall…

CAN 通信-底层

本文主要以rockchip的rk3568平台基础,介绍can 控制器、硬件电路和底层驱动。 rk3568 CAN 控制器 概览 CAN(控制器区域网络)总线是一种稳健的车载总线标准,它允许微控制器和设备在没有主机计算机的应用中相互通信。它是一个基于消息的协议,最初是为了在汽车中多路…

Godot快速精通-从看懂英文文档开始-翻译插件

视频教程地址:https://www.bilibili.com/video/BV1t8411q7hw/ 大家好,我今天要和大家分享的是如何快速精通Godot,众所周知,一般一个开源项目都会有一个文档,对于有一定基础或者是理解能力强的同学,看文档比…

Qt QPair

QPair 文章目录 QPair 摘要QPairQPair 特点代码示例QPair 与 QMap 区别 关键字: Qt、 QPair、 QMap、 键值、 容器 摘要 今天在观摩小伙伴撸代码的时候,突然听到了QPair自己使用Qt开发这么就,竟然都不知道,所以趁没有被人发…

关于网络协议的若干问题(二)

1、网络号、IP 地址、子网掩码和广播地址的先后关系是什么? 答:当在一个数据中心或者一个办公室规划一个网络的时候,首先是网络管理员规划网段,一般是根据将来要容纳的机器数量来规划,一旦定了,以后就不好…