验证多个Filter过滤一个资源时执行顺序

当有多个Filter过滤一个资源时,执行顺序到底是怎样?

如下测试:

定义两个Filter,FirstFilter,SecondFilter,它们过滤同一个index.jsp页面,并且SecondFilter的映射写在FirstFilter后面

并在两个Filter的doFilter()方法中加上输出语句:

例如FirstFilter的doFilter方法:

@Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("FirstFilter doFilter begin--------------------1");
        chain.doFilter(request, response);
        System.out.println("FirstFilter doFilter end  --------------------2");
    }

同理SecondFilter,标上3,4

在index.jsp页面中写Java代码输出5:<% System.out.println("index.jsp--------------------------------------5");%>

启动tomcat后,访问index.jsp,控制台输出如下:

FirstFilter doFilter begin--------------------1
SecondFilter doFilter begin---------------------3
index.jsp--------------------------------------5
SecondFilter doFilter end  ---------------------4
FirstFilter doFilter end  --------------------2

从上面结果看来,不难看出执行顺序了

时间: 2024-10-05 04:01:26

验证多个Filter过滤一个资源时执行顺序的相关文章

Asp.Net WebAPI中Filter过滤器的使用以及执行顺序

转发自:http://www.cnblogs.com/UliiAn/p/5402146.html 在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理,如:权限校验.参数加解密.参数校验等方面我们都可以利用这一特性进行统一处理,今天我们来介绍Filter的开发.使用以及讨论他们的执行顺序. Filter

java类加载时执行顺序

源代码 class HelloA { public HelloA() { System.out.print("A"); } { System.out.print("B"); } static { System.out.print("C"); } } public class HelloB extends HelloA { public HelloB() { System.out.print("D"); } { System.o

类加载时执行顺序

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序. 父类静态之后是子类的静态 静态的按照从上到下的顺序执行,不是代码块先执行,靠前者优先. 执行静态后,先父类从上到下加载 例如实例成员变量实例代码块,之后是子类从上到下加载执行. 父类构造函数.之后是子类构造函数 原文地址:https://www.cnblogs.com/DivineHost/p/8667186.html

自定义拦截器和Filter的执行顺序

自定义拦截器 Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必 须实现HandlerInterceptor接口 1.自定义实现类实现 HandlerInterceptor接口 2.在springmvc配置文件中配置相对应的拦截器 <mvc:interceptors> <!--配置自定义拦截器 ,所有的路径都拦截 --> <bean class="com.neuedu.springmvc.filter.My

filter、servlet、interceptor的执行顺序

1. Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链.它与Servlet的区别在于:它不能直接向用户生成响应.完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理. 通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入

写给后端程序员的HTTP缓存原理介绍--怎样决定一个资源的Cache-Control策略呢

通过Internet获取资源既缓慢,成本又高.为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获 取的资源,从而优化性能,提升体验.虽然Http中关于缓存控制的部分,随着协议演进,有一些变化.但我觉着,作为后端程 序员,在开发Web服务时,只需要关注请求头If-None-Match.响应头ETag.响应头Cache-Control就足够了.因为这三个Http 头就可以满足你的需求,并且,当今绝大多数的浏览器,都支持这三个Http头.我们所要做的就是,确保每个服务器响

SpringMVC返回JSON数据以及文件上传、过滤静态资源

返回JSON数据 在如今前后端分离的趋势下,后端基本不需要再去关心前端页面的事情,只需要把数据处理好并通过相应的接口返回数据给前端即可.在SpringMVC中,我们可以通过@ResponseBody注解来返回JSON数据或者是XML数据. 这个注解的作用是将控制器方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,也就是HTTP响应的内容体,一般我们都是用来返回JSON数据,因为默认是按JSON格式进行转换的. 需要注意的是,在使用此注解之后不会再走视图解

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入