过滤器能够对目标资源的请求和响应进行截取。

我简单的拿博客系统来说明一下:

当我们在正常写博客的时候,首先会用用户名和密码进行登录,随后进入到自己的的主界面(包括博主信息,博主的博文信息我们都会看到),之后我们要进行发博文,点击发博文按钮后进行发博文的一系列操作,这个时候我们所说的过滤器就不会发生作用,因为他能够发表博文;但是大家也知道,我们可以直接的用网址的形式避开登录操作直接进入到博主的主界面,用这种方式可以访问博主的博文,但是你想要发博客的时候,在这个时候我们所说的“过滤器”就起到了作用,我们会发现点击发博客按钮,直接就跳转到登录的界面,这个是因为什么呢?是因为你在没登录的情况下,发博客的请求被过滤器拦截,过滤器发现你I没有登录,自动的将你的动作跳转到另一个界面,也就是登录界面, 你只有登录后才可以进行发博客操作,这个就是过滤器的作用。

下面我用代码的方式说明一下:

以下是web.xml文件配置方式:

<filter>
<filter-name>myFilter</filter-name>
<filter-class>xx.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<servlet-name>目标资源一</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter-name>
<servlet-name>目标资源二</servlet-name>
</filter-mapping>

过滤器对目标资源一和目标资源二都进行过滤,当目标资源一被访问的时候我们将请求转发给目标资源二,这个时候我们发现访问目标资源一时过滤器截取了请求,然后再转发给目标资源一,然后再转发给目标资源二,我们可以看到过滤器没有截取转发到目标资源二的请求,但是我们已经在web.xml文件中配置了该过滤器对目标资源二的过滤,为什么没有起到过滤作用呢?

答案就在于,目标资源一是客户端直接访问,而目标资源二是被转发过来的,这时过滤器就不能过滤目标资源二。如果你直接访问目标资源二,你会发现该过滤器起到了作用?