过滤器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的主要内容,如果未能解决你的问题,请参考以下文章