详谈 Filter 过滤器

article/2025/9/6 9:45:30

详谈 Filter 过滤器

文章首发在CSDN博客,转载请务必注明以下所有链接,否则考虑法律追究责任。

CSDN地址:http://blog.csdn.net/tzs_1041218129/article/details/53345485

个人博客地址:www.54tianzhisheng.cn/Blog/html/filter.html (阅读效果最好)

pdf 版本:www.54tianzhisheng.cn/Blog/pdf/filter.pdf

所有文章干货都在:https://github.com/zhisheng17/zhisheng17.github.io

更多精彩博客还请关注我的微信公众号:猿blog

这里写图片描述

1、简介

  Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

  它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。

  Filter功能:

  • 在HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest 。 根据需要检查 HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
  • 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。 根据需要检查 HttpServletResponse ,也可以修改HttpServletResponse头和数据。

2、如何实现拦截

  Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:

  1. 调用目标资源之前,让一段代码执行。
  2. 是否调用目标资源(即是否让用户访问web资源)。

      web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。

3、Filter开发两步走

  1. 编写java类实现Filter接口,并实现其doFilter方法。
  2. 在 web.xml 文件中使用和元素对编写的filter类进行注册,并设置它所能拦截的资源。

      web.xml配置各节点介绍:

<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
<filter-class>元素用于指定过滤器的完整的限定类名。
<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。
在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。<filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字
<url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)
<servlet-name>指定过滤器所拦截的Servlet名称。
<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。<dispatcher> 子元素可以设置的值及其意义:
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

4、Filter链

  在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。

  web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

多个过滤器执行顺序

一个目标资源可以指定多个过滤器,过滤器的执行顺序是在web.xml文件中的部署顺序:

<filter><filter-name>myFilter1</filter-name><filter-class>cn.cloud.filter.MyFilter1</filter-class></filter><filter-mapping><filter-name>myFilter1</filter-name><url-pattern>/index.jsp</url-pattern></filter-mapping><filter><filter-name>myFilter2</filter-name><filter-class>cn. cloud.filter.MyFilter2</filter-class></filter><filter-mapping><filter-name>myFilter2</filter-name><url-pattern>/index.jsp</url-pattern></filter-mapping>

MyFilter1

public class MyFilter1 extends HttpFilter {public void doFilter(HttpServletRequest request, HttpServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("filter1 start...");chain.doFilter(request, response);//放行,执行MyFilter2的doFilter()方法System.out.println("filter1 end...");}
}

MyFilter2

public class MyFilter2 extends HttpFilter {public void doFilter(HttpServletRequest request, HttpServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("filter2 start...");chain.doFilter(request, response);//放行,执行目标资源System.out.println("filter2 end...");}
}
<body>This is my JSP page. <br><h1>index.jsp</h1><%System.out.println("index.jsp"); %></body>

当有用户访问index.jsp页面时,输出结果如下:

filter1 start...
filter2 start...
index.jsp
filter2 end...
filter1 end...

5、Filter的生命周期

public void init(FilterConfig filterConfig) throws ServletException;//初始化

  和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//拦截请求

  这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL(目标资源)的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。

public void destroy();//销毁

  服务器在创建Filter对象之后,把Filter放到缓存中一直使用(会驻留在内存),通常不会销毁它,当web应用移除或服务器停止时才销毁Filter对象。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。

6、FilterConfig接口

  用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得以下内容:

String getFilterName();//得到filter的名称;与<filter-name>元素对应。
String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null,与<init-param>元素对应.
Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。
public ServletContext getServletContext();//返回Servlet上下文对象的引用。

7、FilterChain

doFilter()方法的参数中有一个类型为FilterChain的参数,它只有一个方法:doFilter(ServletRequest,ServletResponse)

doFilter() 方法的放行,让请求流访问目标资源!其实调用该方法的意思是,当前 Filter 放行了,但不代表其他过滤器也放行。一个目标资源上,可能部署了多个过滤器,所以调用 FilterChain 类的 doFilter() 方法表示的是执行下一个过滤器的 doFilter() 方法,或者是执行目标资源!

如果当前过滤器是最后一个过滤器,那么调用 chain.doFilter() 方法表示执行目标资源,而不是最后一个过滤器,那么 chain.doFilter() 表示执行下一个过滤器的 doFilter() 方法。

8、过滤器的应用场景

  • 执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行,只是在目标资源执行之前做一些准备工作;
  • 通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用;
  • 在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理

设置目标资源

在web.xml文件中部署Filter时,可以通过“*”来执行目标资源:

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

特性与Servlet完全相同!通过这一特性,可以在用户访问敏感资源时,执行过滤器,例如:/admin/*,可以把所有管理员才能访问的资源放到/admin路径下,这时可以通过过滤器来校验用户身份。

还可以为指定目标资源为某个Servlet,例如:

<servlet><servlet-name>myservlet</servlet-name><servlet-class>cn.cloud.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myservlet</servlet-name><url-pattern>/abc</url-pattern></servlet-mapping><filter><filter-name>myfilter</filter-name><filter-class>cn.cloud.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>myfilter</filter-name><servlet-name>myservlet</servlet-name></filter-mapping>

当用户访问http://localhost:8080/filtertest/abc时,会执行名字为myservlet的Servlet,这时会执行过滤器。

9、四种拦截方式

写一个过滤器,指定过滤的资源为b.jsp,然后在浏览器中直接访问b.jsp,会发现过滤器执行了.但是,当在a.jsp中request.getRequestDispathcer(“/b.jsp”).forward(request,response)时,就不会再执行过滤器了!也就是说,默认情况下,只能直接访问目标资源才会执行过滤器,而forward执行目标资源,不会执行过滤器!

public class MyFilter extends HttpFilter {public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("myfilter...");chain.doFilter(request, response);}
}
<filter><filter-name>myfilter</filter-name><filter-class>cn.itcast.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>myfilter</filter-name><url-pattern>/b.jsp</url-pattern></filter-mapping>
<body><h1>b.jsp</h1></body>
<h1>a.jsp</h1><%request.getRequestDispatcher("/b.jsp").forward(request, response);%></body>

在浏览器输入:

http://localhost:8080/filtertest/b.jsp 直接访问b.jsp时,会执行过滤器内容;

http://localhost:8080/filtertest/a.jsp 访问a.jsp,但a.jsp会forward到b.jsp,这时就不会执行过滤器!

过滤器有四种拦截方式!分别是:REQUESTFORWARDINCLUDEERROR

  • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST
  • FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、标签都是转发访问
  • INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、标签都是包含访问
  • ERROR:当目标资源在web.xml中配置为中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

可以在中添加0~n个子元素,来说明当前访问的拦截方式。

如:

 <filter-mapping><filter-name>myfilter</filter-name><url-pattern>/b.jsp</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>

最为常用的就是REQUEST和FORWARD两种拦截方式,而INCLUDE和ERROR都比较少用!其中INCLUDE比较好理解,ERROR方式不易理解,下面给出ERROR拦截方式的例子:

<filter-mapping><filter-name>myfilter</filter-name><url-pattern>/b.jsp</url-pattern><dispatcher>ERROR</dispatcher></filter-mapping><error-page><error-code>500</error-code><location>/b.jsp</location></error-page>
<body><h1>a.jsp</h1><%if(true)throw new RuntimeException("嘻嘻~");%></body>

10、Filter使用案例

  1、使用Filter验证用户登录安全控制

  前段时间参与维护一个项目,用户退出系统后,再去地址栏访问历史,根据url,仍然能够进入系统响应页面。我去检查一下发现对请求未进行过滤验证用户登录。添加一个filter搞定问题!

  先在web.xml配置

<filter><filter-name>SessionFilter</filter-name><filter-class>com.action.login.SessionFilter</filter-class><init-param><param-name>logonStrings</param-name><!-- 对登录页面不进行过滤 --><param-value>/project/index.jsp;login.do</param-value></init-param><init-param><param-name>includeStrings</param-name><!-- 只对指定过滤参数后缀进行过滤 --><param-value>.do;.jsp</param-value></init-param><init-param><param-name>redirectPath</param-name><!-- 未通过跳转到登录界面 --><param-value>/index.jsp</param-value></init-param><init-param><param-name>disabletestfilter</param-name><!-- Y:过滤无效 --><param-value>N</param-value></init-param>
</filter>
<filter-mapping><filter-name>SessionFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

  接着编写FilterServlet:

package com.action.login;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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;/***    判断用户是否登录,未登录则退出系统*/
public class SessionFilter implements Filter {public FilterConfig config;public void destroy() {this.config = null;}public static boolean isContains(String container, String[] regx) {boolean result = false;for (int i = 0; i < regx.length; i++) {if (container.indexOf(regx[i]) != -1) {return true;}}return result;}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest hrequest = (HttpServletRequest)request;HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);String logonStrings = config.getInitParameter("logonStrings");        // 登录登陆页面String includeStrings = config.getInitParameter("includeStrings");    // 过滤资源后缀参数String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 没有登陆转向页面String disabletestfilter = config.getInitParameter("disabletestfilter");// 过滤器是否有效if (disabletestfilter.toUpperCase().equals("Y")) {    // 过滤无效chain.doFilter(request, response);return;}String[] logonList = logonStrings.split(";");String[] includeList = includeStrings.split(";");if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 只对指定过滤参数后缀进行过滤chain.doFilter(request, response);return;}if (this.isContains(hrequest.getRequestURI(), logonList)) {// 对登录页面不进行过滤chain.doFilter(request, response);return;}String user = ( String ) hrequest.getSession().getAttribute("useronly");//判断用户是否登录if (user == null) {wrapper.sendRedirect(redirectPath);return;}else {chain.doFilter(request, response);return;}}public void init(FilterConfig filterConfig) throws ServletException {config = filterConfig;}
}

  这样既可完成对用户所有请求,均要经过这个Filter进行验证用户登录。

  2、防止中文乱码过滤器

  项目使用spring框架时。当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题,那就可以使用这个过滤器。

<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><!--用来指定一个具体的字符集--><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><!--true:无论request是否指定了字符集,都是用encoding;false:如果request已指定一个字符集,则不使用encoding--><param-value>false</param-value></init-param>
</filter>
<filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

  3、Spring+Hibernate的OpenSessionInViewFilter控制session的开关

  当 hibernate+spring 配合使用的时候,如果设置了lazy=true(延迟加载),那么在读取数据的时候,当读取了父数据后,hibernate 会自动关闭 session,这样,当要使用与之关联数据、子数据的时候,系统会抛出lazyinit的错误,这时就需要使用 spring 提供的 OpenSessionInViewFilter 过滤器。

  OpenSessionInViewFilter主要是保持 Session 状态直到 request 将全部页面发送到客户端,直到请求结束后才关闭 session,这样就可以解决延迟加载带来的问题。

  注意:OpenSessionInViewFilter 配置要写在struts2的配置前面。因为 tomcat 容器在加载过滤器的时候是按照顺序加载的,如果配置文件先写的是 struts2 的过滤器配置,然后才是 OpenSessionInViewFilter 过滤器配置,所以加载的顺序导致,action 在获得数据的时候 session 并没有被 spring 管理。

<!-- lazy loading enabled in spring -->
<filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class><init-param><param-name>sessionFactoryBeanName</param-name><!-- 可缺省。默认是从spring容器中找id为sessionFactory的bean,如果id不为sessionFactory,则需要配置如下,此处SessionFactory为spring容器中的bean。 --><param-value>sessionFactory</param-value></init-param><init-param><param-name>singleSession</param-name><!-- singleSession默认为true,若设为false则等于没用OpenSessionInView --><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>*.do</url-pattern>
</filter-mapping>

  4、Struts2的web.xml配置

  项目中使用Struts2同样需要在web.xml配置过滤器,用来截取请求,转到Struts2的Action进行处理。

  注意:如果在2.1.3以前的Struts2版本,过滤器使用org.apache.struts2.dispatcher.FilterDispatcher。否则使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。从Struts2.1.3开始,将废弃ActionContextCleanUp过滤器,而在StrutsPrepareAndExecuteFilter过滤器中包含相应的功能。

  三个初始化参数配置:

  1. config参数:指定要加载的配置文件。逗号分割。
  2. actionPackages参数:指定Action类所在的包空间。逗号分割。
  3. configProviders参数:自定义配置文件提供者,需要实现ConfigurationProvider接口类。逗号分割。
<!-- struts 2.x filter -->
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping><filter-name>struts2</filter-name><url-pattern>*.do</url-pattern>
</filter-mapping>

http://chatgpt.dhexx.cn/article/0cowyLHu.shtml

相关文章

JavaWeb-使用Filter过滤器进行权限检查

文章目录 1. 什么是Filter过滤器2. Filter初体验3. Filter的生命周期4. FilterConfig类5. FilterChain过滤器链6. Filter的拦截路径6.1 精确匹配6.2 目录匹配6.3 后缀名匹配 1. 什么是Filter过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是&#xff1a;Servl…

JavaWeb—Filter过滤器

目录 1、过滤器的原理 2、如何创建过滤器 2.1在xml中注册 2.2使用WebFilter注解 让一些合法的请求通过该过滤器&#xff0c;而拦截一些不符合要求的请求路径。当请求到达该过滤器时&#xff0c;可以为请求设置一些参数。 1、过滤器的原理 2、如何创建过滤器 2.1在xml中注册…

Filter过滤器的拦截路径配置

Filter的介绍 拦截路径配置 拦截所有资源&#xff1a;/* 具体资源路径&#xff1a;/myServlet/demo1 拦截目录&#xff1a;/myServlet/* 后缀名被拦截&#xff1a;*.jsp Filter的介绍 拦截路径配置 过滤器的拦截路径一般有这4种方式 拦截所有资源&#xff1a;/*&#xff0…

Filter过滤器(详解)

一、Filter的工作流程分析 二、Filter 过滤器的使用步骤 编写一个类去实现 Filter 接口实现过滤方法 doFilter()到 web.xml 中去配置 Filter 的拦截路径 1&#xff09; Filter 的代码&#xff1a; public class AdminFilter implements Filter { /** * doFilter 方法&#xff…

Filter过滤器及其作用

1.什么是过滤器&#xff1f; 过滤器&#xff0c;顾名思义就是起到过滤筛选作用的一种事物&#xff0c;只不过相较于现实生活中的过滤器&#xff0c;这里的过滤器过滤的对象是客户端访问的web资源&#xff0c;也可以理解为一种预处理手段&#xff0c;对资源进行拦截后&#xff…

Filter 过滤器的介绍及使用

Filter过滤器 MySql的语法看这篇就够了&#xff0c;传送地址&#xff1a;MySql必知必会 JSP的使用看这篇就够了&#xff0c;传送地址&#xff1a;JSP必知必会 文章目录 Filter过滤器一、Filter过滤器的介绍二、Filter过滤器的使用三、Filter过滤器的生命周期四、FilterConfig类…

Java Servlet中Filter过滤器的原理以及使用方式

详细介绍了Java Web Servlet中的Filter过滤器的原理以及常见用法。 文章目录 1 Filter接口1.1 过滤器的生命周期1.2 doFilter过滤方法 2 Filter的使用3 Filter的执行顺序3.1 多个过滤器 4 Filter的应用4.1 脏话过滤器4.2 编码过滤器4.3 统计IP访问次数4.4 禁止动态资源缓存的过…

python filter过滤器的使用_Python filter过滤器原理及实例应用

filter的语法&#xff1a;filter(函数名字,可迭代的变量) 其实filter就是一个“过滤器”&#xff1a;把【可迭代的变量】中的值&#xff0c;挨个地传给函数进行处理&#xff0c;那些使得函数的返回值为True的变量组成的迭代器对象就是filter表达式的结果 那filter的第一个参数&…

vue filter 过滤器 详解

Vue.js 允许你自定义过滤器filter&#xff0c;可被用于一些常见的文本格式化。 &#xff08;注意vue版本号不同 用法也稍有不同&#xff09; 接下来咱们就记录一下最常用的filter过滤器用法。&#xff08;该示例以多个过滤器为例&#xff0c;当然你也可以删掉第二个过滤器自行…

FFmpeg filter过滤器使用详解

1、FFmpeg过滤器简介 FFmpeg filter 提供了很多音视频特效处理功能&#xff0c;比如视频缩放、截取、翻转、叠加等。 FFmpeg有很多已经实现好的滤波器&#xff0c;这些滤波器的实现位于libavfilter目录之下&#xff0c;用户需要可以调用这些滤波器实现滤波。 我们可以通过ffm…

【全面详解】Filter过滤器的使用

一、什么是过滤器 Filter称之为过滤器&#xff0c;是SerlvetAPI提供的一个Filter接口&#xff0c;A类实现了这个接口&#xff0c;那么A类称之为过滤器Filter。主要用户的请求&#xff08;HttpServletRequest&#xff09;进行预处理&#xff0c;也可以对服务器响应后的数据进行处…

Filter过滤器的例子与注解配置

概念 作用 创建 创建web项目 定义类实现Servlet接口&#xff0c;实现其抽象方法 配置Filter 原理 注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 Filter的过滤器链 概念 当访问服务器的资源时&#xff0c;过滤器可以将请求拦截下来&…

Filter 过滤器接口详解

目录 1、Filter接口描述 2、如何使用Filter接口定义一个过滤器&#xff1f; 3、Filter接口的工作原理 4、Filter、FilterChain、FilterConfig、FilterRegistration、FilterRegistration.Dynamic 接口综述 &#xff08;1&#xff09;如何使用FilterConfig接口对Filter实例进…

Filter过滤器的作用

Filter过滤器的作用 Filter的作用&#xff1a;过滤器处于客户端和服务器端资源之间&#xff0c;对所有的请求或者响应进行拦截操作Filter过滤器在开发过程中的实际运用&#xff1a;Servlet 开发和Filter开发做对比Servlet开发Filter开发 Filter的作用&#xff1a;过滤器处于客户…

Filter 过滤器的使用

目录 一、Filter简介 二、Filter使用 1、Filter 的初体验 2、Filter 的生命周期 3、FilterConfig类 4、FilterChain过滤器链 5、Filter 的拦截路径 1&#xff09;精确匹配 2&#xff09;目录匹配 3&#xff09;后缀名匹配 一、Filter简介 Filter 过滤器它是 JavaWeb…

Filter过滤器工作原理

Filter过滤器工作原理 Filter简介 Filter也称之为过滤器&#xff0c;它是Servlet技术中最激动人心的技术之一&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截&#xff0…

Filter过滤器

文章目录 FilterFilter过滤器的简单说明Filter的执行顺序 Eclipse创建简单的Filter过滤器Filter过滤不到指定路径 Filter Filter过滤器的简单说明 1.过滤器是一个驻留在服务器端的web组件&#xff0c;可以截取客户端和服务器端之间的请求与响应的信息 2.过滤器Filter是对客户…

FilterChain 过滤器链和拦截路径

Filter 过滤器 Chain 链&#xff0c;链条 FilterChain 就是过滤器链&#xff08;多个过滤器如何一起工作&#xff09; Filter 的拦截路径 精确匹配&#xff1a; <url-pattern>/target.jsp</url-pattern>以上配置的路径&#xff0c;表示请求地址必须为&#xff1…

Filter 过滤器

一、Filter 过滤器概念 ① Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是&#xff1a;Servlet 程序、 Listener 监听器、 Filter 过滤器 ② 他是 JavaEE 的规范&#xff0c;也就是接口 ③ 作用&#xff1a;拦截请求&#xff0c;过滤响应 拦截请求常见的应用场景有&…

filter过滤器的概念

文章目录 1. 图示2. 什么是Filter3. 代码演示4. 使用场景&#xff1a;事务处理 1. 图示 2. 什么是Filter Filter也属于Servlet规范Filter开发步骤&#xff1a;新建类实现Filter接口&#xff0c;然后实现其中的三个方法&#xff1a;init、doFilter、destroy 配置Filter&#xf…