当前位置: 首页>编程语言>正文

filter如何获取requestBody filter init方法

Filter的生命周期

当Tomcat启动时,通过反射机制调用Filter的无参构造创建实例对象(结合配置文件),同时调用init方法实现初始化,doFilter方法调用多次,当Tomcat服务关闭的时候,调用destroy来销毁对象。

无参构造函数:只调用一次,当Tomcat启动时调用,(Filter一定要进行配置)

init方法:只调用一次,当Filter的实例化对象创建完成之后调用

doFilter:调用多次,方位Filter的业务逻辑都写在Filter中

destroy:只调用一次,Tomcat关闭时调用

同时配置多个Filter,Filter的调用顺序是由web.xml中的配置顺序来决定的,写在上面的配置先调用,因为web.xml是从上到下顺序读取的。

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器,第1张

启动

当tomcat一启动,直接就调用构造函数和初始化函数,不是像servlet一样第一次访问的时候创建

doFilter函数每次都会进来

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_访问权限_02,第2张

关闭服务,就执行destroy

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_xml_03,第3张

每访问一次,就调用一次 doFilter,这里和servlet一样,每次去请求Filter的时候,就会调doFliter方法。

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_04,第4张

新建一个MyFilter

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_05,第5张

在web.xml里面配置myFilter是login,login可以和characfilter配起来,也可以和myFilter配起来,和servlet也能配起来

一个login请求对应三个资源,Filter的优先级高于servlet。先是CharacterFilter再是myfilter,再往后走就进到servlet

因为CharacterFilter的配置文件放在myFilter的前面,所以先进到characterfilter。

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_06,第6张

用注解的方式配置filter

也可以通过注解的方式简化web.xml的配置

把web.xml里面的代码注释,再用webFilter配置,但是注解的方式不能决定多个filter之间的优先顺序,是随机的

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_07,第7张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_08,第8张

实际开发中Filter的使用场景:

1.统一处理中文乱码

2.屏蔽敏感词

3.控制资源的访问权限

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_09,第9张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_10,第10张

最终跳到TestServlet,所以

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_11,第11张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_12,第12张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_13,第13张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_14,第14张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_访问权限_15,第15张

往后传 放到servlet里面输出

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_16,第16张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_17,第17张

发现是没有处理的 取出来了,原因是Filter是将请求里面的敏感词复制一份,改完输出,但是不能去修改后放回请求,请求里面的内容没有改就继续往下传了,两个资源之间跳转,可以用setAttribute去解决。存到Attribute里面,也用Atrribute去改

Parameter是浏览器给的,可以取但是放不回去

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_18,第18张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_访问权限_19,第19张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_20,第20张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_21,第21张

控制资源的访问权限

加个过滤器,在过滤器当中判断是否是登录状态,如果是登录,跳到download.jsp,如果不是,需要重新登录

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_22,第22张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_xml_23,第23张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_访问权限_24,第24张

过滤器要拦截/download请求

jsp是可以直接访问的,就在根目录下,servlet是间接访问,它是在WEB-INF里面

判断是否登录,转换成session里面是否存在用户信息

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_配置文件_25,第25张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_访问权限_26,第26张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_27,第27张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_xml_28,第28张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_29,第29张

filter如何获取requestBody filter init方法,filter如何获取requestBody filter init方法_过滤器_30,第30张



https://www.xamrdz.com/lan/5fc1935551.html

相关文章: