过滤器Filter

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器Filter相关的知识,希望对你有一定的参考价值。

参考技术A

过滤器是 Servlet 的高级特性之一,是实现了 Filter 接口的 Java。 过滤器位于浏览器与服务器端之间,充当滤网的作用,过滤或处理一些不恰当的请求

过滤器的用处: 过滤敏感字符串、避免中文乱码、权限验证(规定只带有Session或Cookie的用户才能访问)等等;

所有实现了 Filter 接口的类都称为过滤器。过滤器必须实现 Filter 下的三个方法:

其中, doFilter() 方法有三个参数 ServletRequest、ServletResponse 和 FilterChain,FilterChain 参数用于调用后续的过滤器,如果不存在过滤器,则访问目标资源;

web.xml中配置

应用顺序是指 根据请求地址执行对应的过滤器的顺序 。执行拦截一个请求的过滤器是根据 web.xml中 <filter-mapping> 顺序从上往下执行,而且是嵌套执行的。
一个请求中,如果需要经过多个过滤器,其请求和响应的过程如下图所示

Filter过滤器

原文地址

 

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

 

Filter链

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

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

 

 在doFilter()方法(位于Filter接口实现类)中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:

     技术图片

     过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

以上是关于过滤器Filter的主要内容,如果未能解决你的问题,请参考以下文章

过滤器 Filter

为何java中的过滤器filter不起作用

过滤器Filter

filter过滤器配置如何不过滤一些页面

Filter 过滤器的使用详解

AngularJs基础——过滤器filter及自定义过滤器filter