第十三章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的拦截路径

这个后缀名我们可以随便写个字符串都可以




















![[UI5] ODATA V4中的CRUD](https://img-blog.csdnimg.cn/direct/00d16da0cf4b44aa9b1d6efdb7eed8f5.png)
