Filter——概述应用Filter的使用 & 细节
Posted linjing111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Filter——概述应用Filter的使用 & 细节相关的知识,希望对你有一定的参考价值。
Filter概述
过滤器:一个拥有过滤/拦截功能的东西,过滤掉一些不想要的,不和谐的东西.
Web中的过滤器(Filter):Web中的一个组件/程序,就好比Servlet,过滤器就是一个特殊的类. 双向,拦截请求,拦截响应.
1.Filter的作用
过滤器可以对所有的请求或者响应做拦截操作.
1.以常规的方式调用资源(Servlet/JSP);
2.利用修改过的请求信息调用资源;
3.调用资源之后,但在响应到客户端之前,对响应做出修改;
4.阻止当前资源调用,代之转到其他资源.
2.过滤器的应用
1.完成通用的操作
在开发中两个重要的思想:
1.DRY原则: Don’t Repeat Yourself. 开发中拒绝代码重复(因为重复会带来巨大的维护成本)
2.责任分离原则: 各自做各自最擅长的事情
2.可以对请求中的字符做编码
3.登录验证过滤器
4.对敏感字符的过滤
Filter的开发和使用
1.快速入门:
1.定义一个类,实现Filter接口
2.覆写方法
3.配置拦截路径
1.web.xml
2.注解
4.在doFilter()中定义处理请求和响应的代码
1.web.xml:
url-pattern的文本内容, 如:
1: /hello.jsp --------------------> 当前Filter就仅仅只对hello.jsp资源做拦截.
2: /index --------------------> 当前Filter就仅仅只对/index资源做拦截.
3:/* --------------------> 当前Filter就对所有资源做拦截.访问任意的资源,都会先进入该过滤器器.
4:/system/* --------------------> 当前Filter就对以/system/打头的资源做拦截.
2.配置注解:@WebFilter("/*")
过滤器细节
1.过滤器执行流程
1.请求先经过过滤器
2.经过过滤器过滤后再请求资源
3.请求完资源后再回到过滤器
注:两个经过过滤器会对request对象请求数据进行增强,对response对象响应数据进行增强(即过滤数据)
2. 生命周期方法
1.init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行
2.doFilter(ServletRequest,ServletResponse,FilterChan) :代表filter执行过滤的核心方法,如果某资源在已 经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行
3.doFilter方法 destory() :代表是filter销毁方法 当filter对象销毁时执行该方法
3.过滤器配置详解
拦截方式的配置
1.注解配置(设置配置文件的dispatcherTypes属性)
1.Request:默认值,浏览器直接请求资源
2.Forward:转发资源
3.NCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
2.web.xml配置
配置
//浏览器直接请求index.jsp资源时,该过滤器会被执行
@WebFilter(value="/index.jsp" dispatcherTypes=DispatcherType.Request)
//只有转发index.jsp资源时,该过滤器才会被执行
@WebFilter(value="/index.jsp" dispachterTypes=DispatcherType.Forward)
//浏览器直接请求index.jsp资源,转发index.jsp资源时,该过滤器会被执行
@WebFilter(value="/index.jsp" dispatcherTypes={Dispatcher)
4.过滤器链(配置多个过滤器)
只有所有的过滤器都对请求进行了放行,请求才能访问到目标资源,只要多个过滤器中只有一个过滤器不放行 请求,那么这个请求都不能够访问到目标资源。多个过滤器组成的一个整体我们称为过滤器链。而且,过滤器链中 的过滤器是一个一个的执行的,一个过滤器执行完毕之后,会执行下一个过滤器,后面没
有过滤器了,才会访问到 目标资源。只要其中一个过滤器没有放行,那么这个过滤器后面的过滤器也都不会执行了。
1.执行顺序
1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2
5.过滤器1
2.过滤器先后顺序
1.注解配置:按照类名的字符串比较规则进行比较,值小的先执行
eg:AFilter 和 BFilter,AFilter 先执行
2.web.xml:
以上是关于Filter——概述应用Filter的使用 & 细节的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud06_Gateway的概述工程案例代码微服务动态路由Predicate的使用详解Filter(建议收藏)