过滤器
过滤器介绍
- filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行
- 并且可以对目标资源访问前后进行逻辑处理
🐤过滤器编写步骤
- 编写一个过滤器的类实现
Filter
接口 - 实现接口中尚未实现的方法(重点实现doFilter方法)
- 在
web.xml
中进行配置(主要是配置要对哪些资源进行过滤)- 配置
filter-class
,配置过滤器 - 配置
filter-mapping
,对哪些资源进行过滤
- 配置
- 代码实现
实现filter
接口
public class FirstFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter run");
}
public void destroy() {
}
}
web.xml
配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>filtername</filter-name>
<filter-class>com.bntang666.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filtername</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
下次启动服务器,客户都访问一个资源的时候,会被过滤器拦截,要在过滤器当中进行放行之后, 才能够访问到对应的Servlet
,放行可以通过调用chain.doFilter(req,res)
方法,把request、和response传递过去
过滤器的访问流程
- 在发送一个请求时,
web
容器会先到filter
当中,创建三个参数,res、req、chain - 在过滤器当中,放行之后,才能够访问到对应的资源
- 中间的过滤器可能有多个,在一个过滤器当中,可以调用另外一个过滤器
- 也有可能过滤器没有拦截所有的资源,有些资源可以直接被访问
Filter生命周期
init
- 当filter对象创建时调用
- 当服务器启动时创建
- 因为有可能一个filter对应多个Servlet
- 启动时, 先把filter准备好, 访问资源时就可以进行过滤了
- filterconfig
- 当前filter对象的配置信息
- 和servletConfig差不多, 获取名称,参数
- 获取servletContext对象
- 先有的ServletContext
dofitter
- 当匹配到mapping时调用dofilter
- 参数
- request
- response
- FilterChain
- 过滤器链对象
- 内部维护着各个filter的索引,并且知道所有filter的顺序
- 是根据mapping的顺序来执行的
destroy
- 当filter对象销毁时调用
- 关闭服务器时销毁对象
- 和servletContext的生命周期是一样
配置
mapping
- 完全匹配
- 目录匹配
- 扩展名匹配
servlet_name
- 可以把路径直接指定某一个servlet
- 可以有多个servlet_name
- 开发中基本上使用的都是mapping
dispatcher
- 配置请求的形式,不是请求方式,是页面跳转的形式
- 形式分类
- REQUEST:默认值,代表直接访问某个资源时执行filter
- ERROR:发生错误时进行跳转时的执行filter
- INCLUDE:包含资源时执行filter
- FORWARD:转发时才执行filter,转发之后, 才去执行filter
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具