0

在最终移动到servlet s2之前,我想通过 2 个过滤器,它们是过滤器 1,然后按顺序过滤 2。以下是执行这些映射的 xml 文件,但我不知道如何将 filter-1 映射到 filter-2,然后再映射到 servlet-2。我应该如何更改此 xml 以映射我的方式?

    <!-- filter tags -->

<filter>
    <filter-name>Filter-1</filter-name>
    <filter-class>Filters.Filter_1</filter-class>
</filter>

<filter>
    <filter-name>Filter-2</filter-name>
    <filter-class>Filters.Filter_2</filter-class>
</filter>

<filter-mapping>
    <filter-name>Filter-1</filter-name>
    <servlet-name>s2</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>Filter-2</filter-name>
    <servlet-name>s2</servlet-name>
</filter-mapping>

<!-- end of filter tags -->
4

2 回答 2

0

有了这个配置

<filter-mapping>
    <filter-name>Filter-1</filter-name>
    <servlet-name>/*</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>Filter-2</filter-name>
    <servlet-name>/*</servlet-name>
</filter-mapping>

如果您请求 /s2,您的请求将遵循以下步骤:

  1. 过滤器 1
  2. 过滤器 2
  3. s2
  4. 过滤器 2
  5. 过滤器 1

看看文档

过滤器的代码应如下所示:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {

    try {

        // your code for step 1 or 2

        chain.doFilter(request, response);

        // you code for step 4 or 5

    } catch (Exception e) {

        log.error("error" + e.toString());
    }

}
于 2012-09-03T14:34:20.010 回答
0

web.xml中条目的顺序<filter-mapping>决定了它们在过滤器链中的顺序。

因此,当您拥有它时,它们应该以所需的顺序链接起来。

不过,让你的过滤器独立于这个顺序是个好主意。

于 2012-09-03T14:29:53.660 回答