在到达servlet之前从一个过滤器映射到另一个过滤器

时间:2012-09-03 14:20:39

标签: java servlets servlet-filters

在最终转移到 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 -->

2 个答案:

答案 0 :(得分:0)

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

因此,您应该按照所需顺序链接它们。

尽管如此,让过滤器独立于此顺序是个好主意。

答案 1 :(得分: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
  6. 查看doc

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

    @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());
        }
    
    }