Leeycw96 2019-03-11 21:25 采纳率: 75%
浏览 3398
已采纳

Servlet中FilterChain的doFilter()方法的作用

问题如下:

我想要通过ResponseWrapper来对response进行包装,达到对response中部分
文字的屏蔽,就比如原有的response中含有“赌博”二字的话,经过过滤器后会
被转换成****!

首先我创建了一个ResponseReplaceWrapper继承自HttpServletResponse
Wrapper类,代码如下:

图片说明

然后我在自定义的过滤器里面创建了这个ResponseReplaceWrapper对象,下面是我的代码:

图片说明

结果我测试了,原本在response中的内容,经过chain.doFilter(resquest,resp)之后,我自己创建的resp中的charWriter缓冲区也有了,我想问的就是,这doFIilter的作用到底是什么,貌似包含了将response中的内容自动转移到resp的charWriter的作用,其次,HttpServletResponse不能缓存输出内容这句话的含义是什么?

  • 写回答

2条回答 默认 最新

  • qingdao1528 2019-03-11 22:44
    关注

    结束当前拦截器,进入chain拦截器链中的下一个拦截器。

    * Causes the next filter in the chain to be invoked, or if the calling filter is the last filter
    *  in the chain, causes the resource at the end of the chain to be invoked.
    

    比如说我有三个filter如下

    package org.bg.filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter(urlPatterns = "*")
    public class FirstFilter implements Filter {
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain)
                throws IOException, ServletException {
            System.out.println("FirstFilter before");
            chain.doFilter(request, response);
            System.out.println("FirstFilter after");
        }
    }
    
    

    最后执行结果是:

    FirstFilter before
    SecondFilter before
    ThreeFilter before
    ThreeFilter after
    SecondFilter after
    FirstFilter after
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?