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

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条)

报告相同问题?

悬赏问题

  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)