第十三章Filter
- 1.什么是Filter过滤器
- 2.Filter过滤器的基本使用示例
- 3.完整的用户登录和权限检查
- 4.Filter的生命周期
- 5.FilterConfig类
- 6.FilterChain多个过滤器执行的细节
- 7.Filter的拦截路径
1.什么是Filter过滤器
2.Filter过滤器的基本使用示例
现在下面三个都是可以访问的,因为我们没有给他加上filter过滤器
下面我们做到,只有在用户登录后,才能看到这些信息,那么我们如何判断用户有没有登录呢,我们可以看session域中有没有用户的登录信息
如果此时我没有登录,那么我就没法看见a.jsp的内容,他会跳转到login.jsp登录页面
这里有个问题,这种判断我们只能写在jsp页面中,html页面无法写,就算html页面可以写,但是图片没法写代码,这里我们就可以用filter来解决
我们先写一个类去实现这个Filter接口
现在我们已经有了权限检查代码了,但他还不知道要对那些东西进行检查,
下面我们要到web.xml中进行配置
这样我们就可以进行拦截
这里我们没有登录,直接跳到了登录页面
但我们这里访问图片却直接显示出来了
因为这个图片有缓存,他直接从缓存里面拿这个图片,根本没有走服务器
第一种:我们清理掉浏览器全部的缓存
此时就会跳转到登录页面
第二种方法 :我们在后面加请求参数,我们在将验证码的时候讲过
3.完整的用户登录和权限检查
上面演示的步骤不太完整,因为它只有没登录情况下的拦截
我们下面先将登录的表单补充完整
下面我们写一个servlet来处理服务器的登录请求
此时我们输入正确的用户名和密码,登录成功
我们这时就能访问admin下面的页面了
4.Filter的生命周期
当web工程启动的时候,1,2已经执行了
3在每次拦截的时候,就会执行
4在停止web工程的时候就会执行
5.FilterConfig类
这个name就是在web-xml中配置的名称
我们现在配置文件中添加一些参数信息
6.FilterChain多个过滤器执行的细节
在doFilter中有一个filterChain
下面演示一下,注意导包不要导错了
下面我们先写一个Filter1
接着再准备一个Filter2
下面进行配置
下面的jsp页面,就是我们要进行拦截的页面
如果我们将Filter2去掉了,那么还能访问目标资源吗
结果如下
如果将Filter1去掉
先将Filter2恢复
再去掉Filter1
这个Filter1和Filter2,哪个是前面的过滤器是由web-xml中配置顺序决定的
下面我们将filter1和filter2换一个顺序
特点1:
这个是默认情况,不包括我们手动new一个线程的情况
这里是Filter1的线程
这里是Filter2的线程
下面是目标资源的线程
其中的线程是完全一样点的
特点2:
意味着他们之间的数据是共享的
我们加个参数进行访问
甚至我们在Filter1中保存的数据
我们在Filter2中都可以取出来
7.Filter的拦截路径
这个后缀名我们可以随便写个字符串都可以