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

报告相同问题?

悬赏问题

  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题