第十三章Filter

第十三章Filter

  • 1.什么是Filter过滤器
  • 2.Filter过滤器的基本使用示例
  • 3.完整的用户登录和权限检查
  • 4.Filter的生命周期
  • 5.FilterConfig类
  • 6.FilterChain多个过滤器执行的细节
  • 7.Filter的拦截路径

1.什么是Filter过滤器

第十三章Filter_第1张图片

2.Filter过滤器的基本使用示例

第十三章Filter_第2张图片

现在下面三个都是可以访问的,因为我们没有给他加上filter过滤器
第十三章Filter_第3张图片
第十三章Filter_第4张图片
第十三章Filter_第5张图片
下面我们做到,只有在用户登录后,才能看到这些信息,那么我们如何判断用户有没有登录呢,我们可以看session域中有没有用户的登录信息
第十三章Filter_第6张图片
第十三章Filter_第7张图片
第十三章Filter_第8张图片
如果此时我没有登录,那么我就没法看见a.jsp的内容,他会跳转到login.jsp登录页面

这里有个问题,这种判断我们只能写在jsp页面中,html页面无法写,就算html页面可以写,但是图片没法写代码,这里我们就可以用filter来解决
第十三章Filter_第9张图片
我们先写一个类去实现这个Filter接口
第十三章Filter_第10张图片
第十三章Filter_第11张图片
第十三章Filter_第12张图片
第十三章Filter_第13张图片
现在我们已经有了权限检查代码了,但他还不知道要对那些东西进行检查,
下面我们要到web.xml中进行配置

第十三章Filter_第14张图片
第十三章Filter_第15张图片

这样我们就可以进行拦截
这里我们没有登录,直接跳到了登录页面

第十三章Filter_第16张图片

但我们这里访问图片却直接显示出来了
第十三章Filter_第17张图片

因为这个图片有缓存,他直接从缓存里面拿这个图片,根本没有走服务器
第一种:我们清理掉浏览器全部的缓存
第十三章Filter_第18张图片
此时就会跳转到登录页面

第十三章Filter_第19张图片
第二种方法 :我们在后面加请求参数,我们在将验证码的时候讲过

3.完整的用户登录和权限检查

第十三章Filter_第20张图片

上面演示的步骤不太完整,因为它只有没登录情况下的拦截
我们下面先将登录的表单补充完整
第十三章Filter_第21张图片
第十三章Filter_第22张图片
下面我们写一个servlet来处理服务器的登录请求
第十三章Filter_第23张图片
第十三章Filter_第24张图片

第十三章Filter_第25张图片
此时我们输入正确的用户名和密码,登录成功
第十三章Filter_第26张图片
我们这时就能访问admin下面的页面了
第十三章Filter_第27张图片

4.Filter的生命周期

第十三章Filter_第28张图片
第十三章Filter_第29张图片
第十三章Filter_第30张图片
第十三章Filter_第31张图片
当web工程启动的时候,1,2已经执行了
第十三章Filter_第32张图片

3在每次拦截的时候,就会执行
第十三章Filter_第33张图片

4在停止web工程的时候就会执行
第十三章Filter_第34张图片

5.FilterConfig类

第十三章Filter_第35张图片
第十三章Filter_第36张图片
第十三章Filter_第37张图片
这个name就是在web-xml中配置的名称
第十三章Filter_第38张图片
我们现在配置文件中添加一些参数信息
第十三章Filter_第39张图片
第十三章Filter_第40张图片
第十三章Filter_第41张图片
第十三章Filter_第42张图片
在这里插入图片描述

6.FilterChain多个过滤器执行的细节

在doFilter中有一个filterChain
在这里插入图片描述
第十三章Filter_第43张图片

下面演示一下,注意导包不要导错了
下面我们先写一个Filter1
第十三章Filter_第44张图片
第十三章Filter_第45张图片
接着再准备一个Filter2
第十三章Filter_第46张图片
下面进行配置
第十三章Filter_第47张图片
第十三章Filter_第48张图片
第十三章Filter_第49张图片
下面的jsp页面,就是我们要进行拦截的页面
第十三章Filter_第50张图片
第十三章Filter_第51张图片
如果我们将Filter2去掉了,那么还能访问目标资源吗
第十三章Filter_第52张图片
第十三章Filter_第53张图片
结果如下
第十三章Filter_第54张图片

如果将Filter1去掉
第十三章Filter_第55张图片

先将Filter2恢复
第十三章Filter_第56张图片
再去掉Filter1
第十三章Filter_第57张图片
第十三章Filter_第58张图片

这个Filter1和Filter2,哪个是前面的过滤器是由web-xml中配置顺序决定的
下面我们将filter1和filter2换一个顺序
第十三章Filter_第59张图片
第十三章Filter_第60张图片
第十三章Filter_第61张图片
特点1:
这个是默认情况,不包括我们手动new一个线程的情况
这里是Filter1的线程
第十三章Filter_第62张图片
这里是Filter2的线程
第十三章Filter_第63张图片
下面是目标资源的线程
第十三章Filter_第64张图片
其中的线程是完全一样点的
第十三章Filter_第65张图片

特点2:
意味着他们之间的数据是共享的
第十三章Filter_第66张图片
第十三章Filter_第67张图片
第十三章Filter_第68张图片
我们加个参数进行访问
第十三章Filter_第69张图片
第十三章Filter_第70张图片
甚至我们在Filter1中保存的数据
第十三章Filter_第71张图片

我们在Filter2中都可以取出来
第十三章Filter_第72张图片
第十三章Filter_第73张图片

7.Filter的拦截路径

第十三章Filter_第74张图片
这个后缀名我们可以随便写个字符串都可以
第十三章Filter_第75张图片
第十三章Filter_第76张图片

你可能感兴趣的:(JavaWeb,服务器,数据库,前端,filter,后端)