过滤器

原创 2018年04月17日 16:33:09

request过滤器


以下是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>

下面我们更改一下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文件中配置了该过滤器对目标资源二的过滤,为什么又没有起到过滤作用呢?

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

我们上面的web.xml文件配置与以下方式等价:

<filter>myFilter</filter>

<filter-name>myFilter</filter-name>

<filter-class>xx.MyFilter</filte-class>

</filter>

<filter-mapping>

<filter-name>myFilter</filter-name>

<servlet-name>目标资源一</servlet-name>

<dispatcher>REQUEST</dispatcher>

</filter-mapping>

<filter-mapping>

<filter-name>myFilter</filter-name>

<servlet-name>目标资源二</servlet-name>

<dispatcher>REQUEST</dispatcher>

</filter-mapping>

这种方式的配置,说明只有直接访问该目标资源时该过滤器才会起作用,对转发到该目标资源的请求将忽略不处理。

收藏助手
不良信息举报
您举报文章:过滤器
举报原因:
原因补充:

(最多只允许输入30个字)