springboot拦截器和过滤器

过滤器

Filter依赖于servlet容器,属于servlet规范的一部分
Filter的生命周期由servlet容器管理
Filter可拦截所有web资源(包括jsp,Servlet,静态资源,Controller)

自定义Filter

import javax.servlet.*;
@WebFilter(urlPatterns = "/*") //过滤以/开头的任意请求
public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;//ip地址String remoteAddr = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer)session.getAttribute("count");count = Objects.isNull(count)?1:++count;session.setAttribute("count",count);System.out.println("MyFilter "+ remoteAddr + " "+ count);//放行filterChain.doFilter(servletRequest, servletResponse);}
}

启动类上添加servlet组件扫描

@ServletComponentScan(basePackages = "com.meteorological.filtertest")
public class SpringbootApplication {public static void main(String[] args){SpringApplication.run(SpringbootApplication.class, args);}
}

任意Controller执行时都会被自定义过滤器MyFilter拦截

拦截器

Interceptor依赖于SpringMVC框架
Interceptor通过IOC容器来管理,可通过注入等方式来获取其Bean的实例
Interceptor则只拦截Controller

自定义拦截器

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//ip地址String remoteAddr = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer)session.getAttribute("count");count = Objects.isNull(count)?1:++count;session.setAttribute("count",count);System.out.println("MyInterceptor "+ remoteAddr + " "+ count);//放行return true;}
}

将自定义拦截器添加到ioc容器中

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//将自定义拦截器添加到ioc容器中registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");}
}

任意Controller执行时都会被自定义拦截器MyInterceptor拦截

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

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

相关文章

文件的顺序读写函数举例介绍

目录 例1:(使用字符输出函数fputc)例2:(使用字符输入函数fgetc)例3:(使用文本行输出函数fputs )例4:(使用文本行输入函数fgets )例5&a…

Docker基础教程 - 2 Docker安装

更好的阅读体验:点这里 ( www.doubibiji.com ) 2 Docker安装 Docker 的官网地址:https://www.docker.com/,在官网可以找到 Docker Engine 的安装步骤。 下面进行 Docker 环境的安装,正常情况下 Docker …

服务发现:CP or AP?

1 服务发现的意义 为高可用,生产环境中服务提供方都以集群对外提供服务,集群里这些IP随时可能变化,也需要用一本“通信录”及时获取对应服务节点,这获取过程即“服务发现”。 对服务调用方和服务提供方,其契约就是接…

(3)(3.1) FlightDeck FrSky发射器应用程序

文章目录 前言 1 概述 2 Turnkey Packages 3 参数说明 前言 ​Craft and Theory 的 FlightDeck 可让你轻松查看飞行模式、高度、速度、姿态和关键系统警报,包括故障保护和电池错误,如电池不平衡警告和发射机低电量警报。 1 概述 Craft and Theory 的…

【自然语言处理】NLP入门(二):1、正则表达式与Python中的实现(2):字符串格式化输出(%、format()、f-string)

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出3.1 %符号格式化字符串1. 一般形式2. 常用格式字符3. 最小宽度和精度4. 进位制和科学计数法5. 多个对象的格式化输出6. 典例 3.2 format()方法格式化字符串1. 一般形式2. 参数传递…

51单片机-(中断系统)

51单片机-(中断系统) 了解51单片机中断系统、中断源、中断响应条件和优先级等,通过外部中断0实现按键控制LED亮灭为例理解中断工作原理和编程实现过程。 1.中断系统结构 89C51/52的中断系统有5个中断源 ,2个优先级,…

WiFi模块引领智能家居革命:连接未来的生活

随着科技的快速发展,智能家居正成为现代生活的一部分,极大地改变了我们与家庭环境互动的方式。其中,WiFi模块作为关键的连接技术,在推动智能家居革命中发挥着不可忽视的作用。本文将深入探讨WiFi模块如何驱动智能家居革命。 设备互…

1027 打印沙漏

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到…

多线程:线程通信

线程通信 什么是线程通信 当多个线程共同操作共享的资源时,线程间通过某种方式互相告知自己的的状态,以相互协调,并避免无效的资源争夺。 线程通信的常见模型(生产者与消费者模型) 生产者线程负责生产数据消费者线…

对抽象工厂模式的理解

目录 1 背景1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 2 抽象工厂模式3 思考3.1 我的实现3.2 什么时候用抽象工厂模式?(怎么用才是合适的?)3.3 [更好的例子](https://refactoringguru.cn/design-patterns/ab…

【探索Linux】—— 强大的命令行工具 P.24(网络基础)

阅读导航 引言一、计算机网络背景1. 网络发展历史 二、认识 "协议"1. 网络协议概念2. 网络协议初识(1)协议分层(2)OSI参考模型(Open Systems Interconnection Reference Model)(3&…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先,导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作: 1.1.2.1 点击开启虚拟机: 1.1.2.2 默认选择回车CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

cobalt strike钓鱼lnk报错:无法连接到远程服务器

笔者在学习 cobalt strike 制作钓鱼文件时发现多次失败,在 win10 虚拟机的 powershell 的多次排查后发现这样一个报错: 使用“1”个参数调用“DownloadString”时发生异常:“无法连接到远程服务器“ 经过多次排查后发现问题出在 cs 的 team server上&…

解决:Glide 在回调中再次加载图片报错

一、问题说明 Glide 加载图片时监听了回调&#xff0c;并在失败时再次加载其它图片后报错。 代码&#xff1a; Glide.with(mContext).load(imgTeacher).listener(new RequestListener<Drawable>() {Overridepublic boolean onLoadFailed(Nullable GlideException e, O…

MCU 串口接收环形缓冲区的实现

环形缓冲区 1. 环形缓冲区的特性 1.先进先出 2. 当缓冲区被使用完&#xff0c;且又有新的数据需要存储时&#xff0c;丢掉历史最久的数据&#xff0c;保存最新的数据 现实中的存储介质都是线性的&#xff0c;因此我们需要做一下处理&#xff0c;才能在功能上实现环形缓冲区 …

[计算机网络]--I/O多路转接之poll和epoll

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、poll函…

web漏洞与规避

文章目录 一、XSS 跨站脚本攻击1.1 XSS攻击的主要类型反射型XSS存储型XSSDOM型XSS 1.2 前端开发如何应对XSS 二、CSRF 跨站请求伪造2.1 CSRF例子2.2 前端开发如何应对CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站脚本攻击 攻击者通过在受害者的…

stm32学习笔记:IIC通信(未完)

概述 第一块&#xff1a;介绍协议规则&#xff0c;然后用软件模拟的形式来实现协议。 第二块&#xff1a;介绍STM32的iic外设&#xff0c;然后用硬件来实现协议。 程序一现象&#xff1a;通过软件I2C通信&#xff0c;对MPU6050芯片内部的寄存器进行读写&#xff0c;写入到配…

【Synchronized同步原理】

Synchronized同步原理 1. synchronized的使用&#xff1f;2. 如何保证线程安全的&#xff1f;3.可重入原理&#xff08;加锁次数计数器&#xff09;4. 原子性和可见性(顺序性) 1. synchronized的使用&#xff1f; 对象锁方法锁类锁 2. 如何保证线程安全的&#xff1f; publi…

关于数据提交上传服务端的数据类型以及项目打包上线的流程

1 请求头的类型&#xff1a; content-type&#xff1b; 01: application/json 数据以json格式请求&#xff1a;{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…