SpringMVC过滤器

SpringMVC 过滤器 Filter是servlet规范的三大组件(Servlet程序、Fiter拦截器、Listener监听器)之一。顾名思义,就是过滤。 阅读详情

过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

一.Filter接口

package javax.servlet;

import java.io.IOException;

public abstract interface Filter
{
public abstract void init(FilterConfig paramFilterConfig)
throws ServletException;

public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain)
throws IOException, ServletException;

public abstract void destroy();
}

创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
1. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如Controller实现);
返回值:true表示继续流程(如调用下一个拦截器或处理器);
false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
2. postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
3. afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。

二.自定义过滤器

1.自定义过滤器,要实现Filter接口

package org.springmvc.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter {

public void init(FilterConfig paramFilterConfig) throws ServletException {

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("MyFilter.doFilter before..");
chain.doFilter(request, response);
System.out.println("MyFilter.doFilter after..");
}

public void destroy() {
}
}

其中chain.doFilter为过滤器链,表示执行完这个过滤器之后接着往下执行
2.在web.xml文件中配置定义的过滤器

<!-- 过滤器配置 -->
<filter>
<filter-name>myFilter</filter-name>
<filter-class>org.springmvc.filter.MyFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3.控制台打印结果

MyFilter.doFilter before..
MyInterceptor.preHandle
MyInterceptor.preHandle2
hello world
MyInterceptor.postHandle2
MyInterceptor.postHandle
MyInterceptor.afterCompletion2
MyInterceptor.afterCompletion
MyFilter.doFilter after..
15张图详解三方支付:总架构、5大核心业务处理流程、备付金管理 用户可以将银行卡与零钱账户绑定,建立银行结算账户与支付账户的连接,然后将银行账户资金充值到零钱账户中,或将零钱账号中的余额提现至绑定的银行卡。因此,用户在A支付机构的零钱一般只能支付给A支付机构的商户,如支付宝的零钱不能支付给微信的商户。这五大业务的协同运作,使得第三方支付机构这一庞大的支付服务平台能够为市场提供卓越的支付能力。到了结算时间,网联会向备付金集中存管账户提交结算指令,在第三方支付机构备付金集中存管账户内完成最终的结算,并将结算结果及额度变动情况通知给第三方支付机构,具体流程如图13所示。 阅读详情

相关推荐

HybridCLR热更新打包报错全解析:从原理到实战解决方案

热更新技术是现代游戏和应用开发中实现动态内容交付与Bug修复的核心机制,它允许开发者在无需重新发布完整应用的情况下更新代码逻辑。其原理通常涉及在运行时加载并执行新的代码模块,这要求框架在底层实现安全的代码隔离、内存管理与元数据桥接。在Unity生态中,HybridCLR作为基于IL2CPP的高性能热更新解决方案,通过补充元数据和AOT泛型引用技术,实现了对C#代码的原生级热更支持,显著提升了开发迭代效率与线上问题修复能力。然而,在实际的工程实践中,尤其是在面向Android、iOS等多平台打包构建时,开发者

weixin_29017445的博客 309

Spring过滤器

当用户提交了一个包含中文参数的请求时,浏览器首先会将这些中文转化为一个字节序列,发送到服务器,服务器接收到这个字节序列,会按照其默认的字符编码ISO8859-1对其进行编码,此时就产生了乱码。当对servlet的请求到达servlet容器时,会先对请求进行解析,使用解析出的URI,作为比较对象,从第一个map中查找是否有相同的key,若存在相同的key,那么读取其value,即servlet对象的引用,执行该servlet的service()方法。,没有进行输出,由此可证,动态资源没有访问的资格。

m0_46612024的博客 1269

从零到一:Admin.NET中Swagger与Knife4jUI的深度集成实践

本文详细介绍了在Admin.NET框架中深度集成Swagger与Knife4jUI的实践方法,从基础配置到高级定制,包括认证配置、安全增强、界面主题定制等。通过Furion框架简化配置,开发者可以快速构建专业且友好的API文档界面,提升团队协作效率。

defi6farmer的博客 408

在Spring中的过滤器

实现Filter接口,并重写里面的三个方法,其中有三个默认的方法(init初始方法,doFilter核心过滤方法,destroy销毁方法)。/*** 自定义过滤器,Filter是被Servlet管理的,可以获取到Request请求、Response响应。* 对请求前后进行处理。

m0_72612166的博客 2617

从Chiplet到UCIE:D2D互联技术如何重塑半导体设计生态

本文探讨了D2D互联技术在半导体设计中的革命性作用,从Chiplet到UCIE标准的演进如何重塑行业生态。详细分析了D2D互联的技术本质、架构选择及UCIE标准带来的变革,并展望了未来光学D2D和3D集成等趋势。高速互联接口技术的突破为AI加速器和计算芯片提供了更高带宽和能效。

weixin_29292535的博客 932

ARM 汇编指令:LSL(逻辑左移) 和 LSR(逻辑右移)

ARM 汇编中的 LSL(逻辑左移)和 LSR(逻辑右移)是基础移位指令,分别实现二进制位的左移和右移操作。LSL 低位补0,等效于乘以2^n;LSR 高位补0,等效于无符号除以2^n。这两个指令可以单独使用或与其他指令结合(如ADD、MOV等),利用ARM的"桶形移位器"硬件实现高效运算。关键特性包括:移位范围0-31(LSL)或1-32(LSR),可选更新标志位,以及与其他指令结合时的无额外开销优势。LSR与ASR(算术右移)的主要区别在于高位填充方式,分别适用于无符号和有符号数处理

guigenyi的专栏 1814

SpringMVC-快速入门(6.2)- 自定义过滤器

1、修改HttpServletRequest的参数:新建装饰类继承于HttpServletRequestWrapper,重写getParameterValues()方法;新增过滤器MyFilter,将装饰类加入filterChain。 2、修改HttpServletRequest的body数据:新建装饰类继承于HttpServletRequestWrapper,重写getInputStream()方法;新增过滤器MyFilter,将装饰类加入filterChain。............

weixin_40017062的博客 3286

STM32F103结合HAL库实现蓝牙遥控四麦小车的PID闭环控制

本文详细介绍了如何使用STM32F103结合HAL库实现蓝牙遥控四麦小车的PID闭环控制。从硬件选型、电路搭建到PID算法实现与调参,全面解析了四麦小车的运动控制方案,特别强调了蓝牙通信协议设计和麦轮运动学解算的关键技术。

weixin_29169899的博客 292

SpringMVC——过滤器

SpringMVC——过滤器实现和理解 一、先提出几个问题 ?过滤器是什么? ?过滤器是如何实现的? ?过滤器和拦截器的区别? ?过滤器的核心原理是什么(阅读源码)? 之前我学东西总是不够深入,现在决定换个思路来学习。 每次学一个东西,都先提出问题,让自己带着兴趣去实践和学习。 1、先问是什么? 2、然后怎么做?实践的过程能更加熟练并提出更深入的问题 3、最后为什么?这时候...

十八百伴 3万+

RC电路(一):微分|积分

的取值不同,会导致输出波形和输入波形之间的关系也不同,由此也会产生不同的应用。输出为0,随着电容充满电,运放-输入端得到的分压为正最大值,可等效成一个电压源,且电压不可突变,此时电流反向为最大值,开始充电时的容抗为0,电压不可突变则电压差为0,运放。开始充电时的容抗为0,电压不可突变则电压差为0,运放。输入端得到的分压也不可突变,随着电容放完电,于是。,因电容上电压不能突变(来不及充电,相当于短路,由上分析可得积分运算电路中,输出为运放的负最大峰值,随着电容充满电,输出为运放的正最大峰值,随着电容放完电,

既有随处可栖的江湖,也有追风逐梦的骁勇! 1万+

【AIZ智能体】Codex 全能AI助手从部署到使用实战操作详解

Codex 全能AI助手从部署到使用实战操作详解

congge 2987

SpringMVC 过滤器Filter使用解析

SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码 如上所示的spring-web.jar包结构所示, Spring的web包中中提供有很多过滤器,这些过滤器位于org.springframework.web.filter并且理所当然地实现了javax.servlet

无怨无悔专栏 6607

使用verilog设计实现QR分解

QR(正交三角)分解法是求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。 使用verilog对QR实现方法进行设计并进行功能仿真: 如下: 顶层模块代码: module TOP( H1R, H1I, H2R, H2I, H3R, H3I, H4R, H4I, clk, rst_n, Y1R, Y1I, Y2R, Y2I, X1R, X1I, X2R, X2I ); parameter width = 16; // I

QQ_778132974的博客 2150

SpringMvc框架配置过滤器

SpringMvc框架配置过滤器 本文以简单的登录过滤器为例 开发环境 jdk 8 idea2019.3.5 maven 3.6.3 spring-webmvc 5.1.9.RELEASE web.xml 4.0 ajax 3.5.1 一. 编写过滤器配置类 import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.ser

Scp_blog的博客 3037

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringMVC中的过滤器和拦截器

SpringMVC中的过滤器和拦截器 文章目录SpringMVC中的过滤器和拦截器一、过滤器二、拦截器三、小结 一、过滤器 ​ 过滤器Filter是通过实现java.servlet.filter接口实现过滤器功能,作用是用于对传入的request和响应的response进行一些处理,比如对请求参数进行校验,或者设置、检验头部信息,再或者对一些非法行为进行校验。由实现的接口可知,过滤器是依赖于servlet容器。所以由于过滤器不依赖于spring容器,它也就无法获取到容器中的对象。 创建一个过滤器类继承j

csdnjiamin的博客 1312

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

springMVC 过滤器和拦截器

过滤器 filter 主要是针对用户的用求进行预处理,再交给servlet进行处理并生成响应,接着再对服务器的响应进行后处理。拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。它采用AOP的设计思想,在方法之前之后提供了三个跟主功能没有关系的拓展接口。

dlcoing的博客 1623

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringMVC配置自定义过滤器

SpringMVC配置自定义过滤器 环境 开发工具: idea2019.3.5 springmvc版本: 5.1.9.RELEASE <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dep

Scp_blog的博客 4418

springmvc配置过滤器的作用和方法

springmvc配置过滤器的作用和方法 http协议里常见的请求方式有四种:post delete put get 分别对应增删改查四个操作 普通浏览器一般只支持get和post,其他两个方式是通过过滤器支持的。 过滤器支持要求: 1、方法有隐藏域且name是_method 如: <input type="hidden" name="_method" value="delete/put"...

qq_43100957的博客 2531

SpringMVC源码阅读:过滤器

SpringMVC源码阅读:过滤器 1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring4.3.7)分析,弄清楚SpringMVC过滤器是如何执行的,并自定义过滤器,分清楚过滤器和拦截器的区别 2...

Jinyao的博客 560

SpringMVC-设置编码过滤器

1.接上文-》springmvc获取请求参数链接 2.在web.xml配置编码过滤器 <!-- 配置编码过滤器--> <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

Kevinnsm的博客 899

SpringMVC 自定义过滤器

SpringMVC 自定义过滤器 网上的大佬的代码,摘自此链接,适用于get和post请求,全部乱码的过滤器 import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; imp

weixin_44481891的博客 964
上一篇: SpringMVC文件上传
下一篇: SpringMVC拦截器
德玛西亚2班
博客等级 码龄10年 39粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值