问题如下:
我想要通过ResponseWrapper来对response进行包装,达到对response中部分
文字的屏蔽,就比如原有的response中含有“赌博”二字的话,经过过滤器后会
被转换成****!
首先我创建了一个ResponseReplaceWrapper继承自HttpServletResponse
Wrapper类,代码如下:
结果我测试了,原本在response中的内容,经过chain.doFilter(resquest,resp)之后,我自己创建的resp中的charWriter缓冲区也有了,我想问的就是,这doFIilter的作用到底是什么,貌似包含了将response中的内容自动转移到resp的charWriter的作用,其次,HttpServletResponse不能缓存输出内容这句话的含义是什么?
结束当前拦截器,进入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
我来补充chain.doFilter的作用是执行链中下一个filter的doFilter方法,上面的执行步骤是输出 XXXFilter before后在输出XXXFilter after前,
执行了chain.doFilter
因此会进入下一个filter的doFilter方法,以此类推,当执行到最后一个拦截器的doFilter方法时,输出XXXFilter before后执行chain.doFilter,
因为没有下一个了,所以就会往下执行 输出XXXFilter after,然后返回上一个拦截器执行chain.doFilter后的内容,所以FirstFilter after是后输出的