最近工作轻松一下,偶尔回顾一下java知识,发现很多都忘记了,寻思着有时间就回顾一下,随便记录下来,每期都简短一些,方便碎片时间来复习。
什么是filter?
概念:一个实现了特殊接口的Java类,完成对请求资源过滤的功能。
应用:在我们真正执行servlet之前要执行的一段代码叫做过滤器。
filter过滤器的作用原理
结合图示说明下filter的两种常用方式
一、过滤请求
就是过滤中文乱码,如下图。
二、拦截请求
放行与否完全由过滤器来决定,如果放行,那么请求到达.do的目的地,如果不放行会由过滤器来决定这个请求最终响应的地址。开发中的常用方式,拦截请求判断是否登录
请注意:如果请求经过了某过滤器,那么当servlet给客户端做响应的时候,一定是再一次经过该过滤器。响应时经过的过滤器的代码部分为chian.doFilter方法下面的内容。
编写filter的步骤
1、编写一个类
a.实现filter接口
b.重写方法
2、编写配置文件
a.注册filter
b.绑定路径
3、测试
4. 过滤器的生命周期
1.在服务器启动的时候,过滤器对象创建。
2.过滤器对象创建完毕之后,马上调用init方法进行初始化工作。
3.在有相应的路径匹配的url访问的时候,执行doFilter方法进行过滤工作
4.过滤器对象在创建完毕之后,一直存在在服务器中,也就是说,过滤器也是单例的。
5.关闭服务器,过滤器对象销毁。在销毁之前,调用destory方法进行收尾工作。
注意:destory方法只有在正常关闭服务器的情况下,才执行。
5、过滤器链的作用
过滤器的链其实就是放行请求这一句代码
chain.doFilter(req, resp);
过滤器链的执行规则:
执行完一个过滤器的时候,系统会查看还有没有匹配的过滤器,如果有,过滤器链会将请求传递到下一个过滤器。如果没有,将请求传递到servlet(目标地址)
6、过滤器的url-pattern
多个过滤器如果对请求url都匹配,那么他们的执行顺序:
按照filter在web.xml中的配置的上下顺序来决定的,配置在相对上面的优先执行
servlet过个路径的匹配:
优先级顺序 :
全路径匹配 > 部分全路径+通配符匹配 > 通配符匹配 > 后缀名匹配
7、用户登录的过滤操作
WEB-INF里面的资源
如果WEB-INF字符串出现在访问地址栏上,那么资源就是安全的,访问不到
如果WEB-INF字符串没有出现在访问地址栏上,那么资源就是不安全的,能够访问到
所以WEB-INF里面的内容只能说是相对安全的
需求:
只有登陆过后,才能够访问到dic下的资源
如何判断有没有登陆过,判断session